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

Qual è il significato di epoch in txid_current() in postgresql?

Epoch viene utilizzato per impedire a txid_current() di avvolgersi e iniziare da zero (o per essere esatti da 3 perché i valori 0,1,2 vengono utilizzati internamente).

Quindi funziona così:

Postgres ha un contatore xid interno a 32 bit che è diverso dal valore restituito da txid_current(). Il xid interno esegue il wrapping e reimposta il conteggio ad ogni wraparound.

Il txid_current(), d'altra parte, restituisce 64 bit (bigint) in cui i bit alti sono un incremento di epoch che avviene una volta per xid wrap around e non parte da zero.

Quindi, ad ogni avvolgimento, l'epoca entra in gioco e i bit alti di txid_current() vengono modificati per impedire il ripristino di txids, e invece txids continua ad aumentare fino al raggiungimento del limite di 64 bit (a volte in un futuro molto lontano, molto tempo dopo la nostra morte).