sql >> Databasteknik >  >> RDS >> PostgreSQL

Atomiskt inställt SERIE-värde när transaktionen utförs

Postgres 9.5 introducerade en ny funktion relaterad till detta problem:commit timestamps .

Du behöver bara aktivera track_commit_timestamp i postgresql.conf (och starta om!) för att börja spåra commit-tidsstämplar. Sedan kan du fråga:

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.
Relaterat verktyg funktioner i manualen .

Funktionsvolatiliteten är bara VOLATILE eftersom transaktions-ID:n (xid ) kan svepa runt per definition. Så du kan inte skapa ett funktionellt index på den.
Du kan förfalska IMMUTABLE volatilitet i ett funktionsomslag för applikationer inom en begränsad tidsram, men du måste vara medveten om konsekvenserna. Relaterat fall med mer förklaring:

För många användningsfall (som ditt?) som bara är intresserade av sekvensen av bekräftelser (och inte absolut tid) kan det vara mer effektivt att arbeta med xmin casta till bigint "direkt" (xmin::text::bigint ) istället för att bestämma tidsstämplar. (xid är ett internt osignerat heltal, den övre halvan som inte passar in i ett integer med tecken .) Återigen, var medveten om begränsningar på grund av eventuell xid-omslutning.

Av samma anledning bevaras tidsstämplar för commit inte på obestämd tid . För små till medelstora databaser, xid wraparound händer nästan aldrig - men det kommer så småningom om klustret är levande tillräckligt länge. Läs kapitlet "Förhindra transaktions-ID Wraparound-fel" i manualen för detaljer.




  1. Hur får jag de k närmaste grannarna för geodjango?

  2. INFOGA om inte Exist Mysql

  3. FEL 1878 (HY000):Tillfälligt filskrivfel

  4. Dynamiskt radspann vid hämtning av poster från databasen