Eu uso a xmin
coluna do sistema para implementar uma forma de bloqueio otimista e, às vezes, preciso 'tocar' a linha para aumentar xmin
sem realmente atualizar a linha. Atualmente, apenas faço uma atualização 'fictícia':
create table t(id integer);
insert into t(id) values(1);
insert into t(id) values(2);
select xmin::text from t where id=1
/*
| XMIN |
---------
| 87159 |
*/
update t set id=id where id=1
select xmin::text from t where id=1
/*
| XMIN |
---------
| 87196 |
*/
Estou curioso para saber se existe outra maneira de xid
atualizar sem fazer uma atualização, análoga ao touch
comando unix?
Bem, se você deseja alterar o xmin, é necessário garantir que outras transações ainda possam ver a versão antiga da linha; portanto, você precisa fazer uma cópia com o novo xmin, o que você faz com um arquivo
UPDATE
. Você pode reduzir o impacto disso atualizando uma coluna não indexada para obter o benefício do HOT.Claro, toda essa linha de pensamento é duvidosa e talvez você devesse usar algum outro recurso.