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

Come installare Composer su Ubuntu

Composer è il gestore delle dipendenze per PHP. Per installarlo su Ubuntu seguiamo questi semplici passi illustrati qui sotto. Installazione di Composer Per prima cosa

Come realizzare un client NTP in Python

In questo post vediamo come realizzare, utilizzando poche righe di codice, uno script Python che agisca da client NTP. Soluzione 1 In questa prima soluzione

Come avviare UEFI dopo reboot su Linux

L’accesso a UEFI al boot del computer richiede la pressione di un tasto che varia per ogni produttore di hardware. I tasti che più comunemente

Partners