Postgres 9.5 představil novou funkci související s tímto problémem:časová razítka potvrzení .
Stačí si aktivovat track_commit_timestamp
v postgresql.conf
(a restartujte!), abyste mohli začít sledovat časová razítka odevzdání. Pak se můžete zeptat:
SELECT * FROM tbl
WHERE pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
Přečtěte si kapitolu "Zavázat sledování časového razítka"
na Postgres Wiki.
Související utilita funkce v příručce
.
Volatilita funkce je pouze VOLATILE
protože ID transakcí (xid
) může obtékat podle definice. Takže nemůžete vytvořit funkční index na něm.
Mohli byste předstírat IMMUTABLE
volatilita v obalu funkcí pro aplikace v omezeném časovém rámci, ale musíte si být vědomi důsledků. Související případ s podrobnějším vysvětlením:
- Podporuje PostgreSQL "accent insensitive" " kolace?
- Jak klíčová slova IMMUTABLE, STABLE a VOLATILE ovlivňují chování funkce?
Pro mnoho případů použití (jako ten váš?), které se zajímají pouze o posloupnost potvrzení (a nikoli o absolutní čas), může být efektivnější pracovat s xmin
přenést do bigint
"přímo" (xmin::text::bigint
) místo časových razítek potvrzení. (xid
je interně celé číslo bez znaménka, horní polovina se nevejde do integer
se znaménkem .) Opět si uvědomte omezení kvůli možnému xid wraparound.
Ze stejného důvodu se časová razítka potvrzení neuchovávají na dobu neurčitou . Pro malé až střední databáze xid
Obtékání se téměř nikdy nestane - ale nakonec se to stane, pokud je cluster dostatečně dlouho aktivní. Přečtěte si kapitolu „Prevence selhání obtékání ID transakce“ podrobnosti naleznete v příručce.