PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was bedeutet Epoche in txid_current() in Postgresql?

Epoch wird verwendet, um zu verhindern, dass txid_current() umbricht und bei Null beginnt (oder um genau zu sein, bei 3, weil die Werte 0,1,2 intern wieder verwendet werden).

So funktioniert es wie folgt:

Postgres hat einen internen 32-Bit-XID-Zähler, der sich von dem Wert unterscheidet, der von txid_current() zurückgegeben wird. Die interne xid läuft um und setzt ihre Zählung bei jedem Umlauf zurück.

txid_current() hingegen gibt 64 Bit (bigint) zurück, bei dem die High-Bits ein Epocheninkrement sind, das einmal pro xid-Wrap-Around passiert und nicht bei Null beginnt.

Bei jedem Umlauf setzt also die Epoche ein und die hohen Bits von txid_current() werden modifiziert, um zu verhindern, dass txids zurückgesetzt werden, und stattdessen erhöhen sich txids weiter, bis die 64-Bit-Grenze erreicht ist (manchmal in einer sehr fernen Zukunft, lange nachdem wir alle gestorben sind).