Postgres 9.5 introduziu um novo recurso relacionado a este problema:commit timestamps .
Você só precisa ativar
track_commit_timestamp
em postgresql.conf
(e reinicie!) para começar a rastrear os timestamps de commit. Então você pode consultar:SELECT * FROM tbl
WHERE pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
Leia o capítulo "Commit timestamp tracking" no Postgres Wiki.
Utilitário relacionado funções no manual .
A volatilidade da função é apenas
VOLATILE
porque os IDs de transação (xid
) pode envolver por definição. Então você não pode criar um índice funcional nele.Você pode falsificar
IMMUTABLE
volatilidade em um wrapper de função para aplicativos em um período de tempo limitado, mas você precisa estar ciente das implicações. Caso relacionado com mais explicações:- O PostgreSQL suporta "sotaque insensível " agrupamentos?
- Como as palavras-chave IMMUTABLE, STABLE e VOLATILE afetam o comportamento da função?
Para muitos casos de uso (como o seu?) que estão interessados apenas na sequência de commits (e não no tempo absoluto), pode ser mais eficiente trabalhar com
xmin
transmitir para bigint
"diretamente" (xmin::text::bigint
) em vez de carimbos de data/hora de confirmação. (xid
é um inteiro sem sinal internamente, a metade superior que não cabe em um integer
assinado .) Mais uma vez, esteja ciente das limitações devido ao possível contorno do xid. Pelo mesmo motivo, os carimbos de data/hora de confirmação não são preservados indefinidamente . Para bancos de dados pequenos e médios,
xid
o wraparound quase nunca acontece - mas eventualmente acontecerá se o cluster estiver ativo por tempo suficiente. Leia o capítulo "Evitando falhas de wraparound de ID de transação" no manual para detalhes.