Postgres 9.5 introducerede en ny funktion relateret til dette problem:bekræft tidsstempler .
Du skal bare aktivere track_commit_timestamp
i postgresql.conf
(og genstart!) for at begynde at spore commit-tidsstempler. Derefter kan du forespørge:
SELECT * FROM tbl
WHERE pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
Læs kapitlet "Commit timestamp tracking"
i Postgres Wiki.
Relateret værktøj funktioner i manualen
.
Funktionsvolatilitet er kun VOLATILE
fordi transaktions-id'er (xid
) kan omsluttes pr. definition. Så du kan ikke oprette et funktionelt indeks på den.
Du kan forfalske IMMUTABLE
volatilitet i en funktionsindpakning for applikationer i en begrænset tidsramme, men du skal være opmærksom på implikationer. Relateret sag med mere forklaring:
- Understøtter PostgreSQL "accent insensitive" "sammenstillinger?
- Hvordan påvirker uforanderlige, stabile og flygtige søgeord funktions adfærd?
For mange use cases (som din?), der kun er interesseret i rækkefølgen af commits (og ikke absolut tid), kan det være mere effektivt at arbejde med xmin
cast til bigint
"direkte" (xmin::text::bigint
) i stedet for at begå tidsstempler. (xid
er et internt usigneret heltal, den øverste halvdel, der ikke passer ind i et integer
med fortegn .) Igen, vær opmærksom på begrænsninger på grund af mulig xid-omslutning.
Af samme grund bliver commit-tidsstempler ikke bevaret på ubestemt tid . For små til mellemstore databaser, xid
wraparound sker næsten aldrig - men det vil i sidste ende, hvis klyngen er levende længe nok. Læs kapitlet "Forebyggelse af transaktions-id wraparound-fejl" i manualen for detaljer.