sql >> Database teknologi >  >> RDS >> PostgreSQL

Atomisk indstillet SERIE-værdi, når transaktionen udføres

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:

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.




  1. Hvad svarer til en DO-blok for Postgres <9.0

  2. Svarende til beskriv tabel i PgAdmin3

  3. Fjederstart CLIENT_PLUGIN_AUTH er påkrævet

  4. Dataændringer under Read Committed Snapshot Isolation