Che cos’è log_cnt in una Postgres sequence

Cerca

Uno scenario interessante su cui mi è capitato di lavorare riguarda l’utilizzo di una sequence in un database Postgres. In un applicazione containerizzata con Docker era prevista un’operazione di reboot del sistema operativo, la quale eseguiva il riavvio della macchina host su cui erano in esecuzione i container. La cosa bizzarra è che a seguito del riavvio, la sequence veniva incrementata di un valore pari a quello indicato nel campo log_cnt della tabella della sequence.

Esempio pratico

Questo esempio è preso dal caso reale che ho affrontato. Come prima cosa, quando interroghiamo la sequence per verificarne lo stato corrente utilizzando questa query

				
					SELECT * FROM sequence_name;
				
			

Otteniamo un risultato simile al seguente

				
					last_value | log_cnt | is_called 
------------+---------+-----------
          1 |      32 | t
(1 row)
				
			
Notiamo che l’ultimo valore della sequence è 1 e che il valore log_cnt è 32. La cosa anomala si verificava al riavvio della macchina host mediante questo comando
				
					dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.Reboot" boolean:true'
				
			
Una volta ripartita la macchina host, il valore last_value era 33 ossia log_cnt + last_value.
				
					 last_value | log_cnt | is_called 
------------+---------+-----------
         33 |       0 | t
(1 row)
				
			

Per maggiori approfondimenti tecnici invito a prendere visione di questa domanda su stackoverflow: https://stackoverflow.com/questions/66456952/what-does-log-cnt-mean-in-the-postgres-sequence.

Per una soluzione pratica, è sufficiente, prima del riavvio della macchina host, arrestare il container dove è in esecuzione Postgres, affinché l’evento di reboot della macchina non venga interpretato come un crash di sistema e gestito quindi da Postgres con un restore della sequence al valore last_value + log_cnt.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Recent
Partners