Linux Server – Aggiornare PostgreSQL alla versione 17

L’aggiornamento di PostgreSQL a una nuova versione non è un’operazione da prendere alla leggera. Una migrazione ben pianificata evita problemi e garantisce che il database continui a funzionare senza intoppi. In questa guida aggiorniamo PostgreSQL alla versione 17 su un sistema Ubuntu.

Verifiche pre-aggiornamento dei pacchetti installati e dello spazio disponibile

al fine di non avere intoppi in fase di migrazione è bene verificare quali pacchetti che fanno riferimento a postgreSQL sono installati nel nostro sistema e quanto spazio occupano i database (oltre chiaramente ai loro percosi e nomi)

Prima di tutto, vediamo quali versioni di PostgreSQL sono già installate:

dpkg --get-selections | grep postgres

questo il mio output:

postgresql                                      install
postgresql-12                                   install                                   
postgresql-client-12                            install
postgresql-common                               install
postgresql-common-dev                           install
postgresql-contrib                              install
postgresql-plperl-12                            install

già da questa prima analisi vedo che nel sistema è installato “postgresql-plperl-12” quindi nel mio caso dovrò aggiornare anche questo componente alla versione 17

verifichiamo quindi quali database sono sulla macchina e la loro dimensione:

sudo pg_lsclusters

che restituisce:

Ver Cluster Port Status Owner    Data directory              Log file
12  main    5434 online   postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

a questo punto posso verificare la dimensione del database con il comando:

sudo du -sh /var/lib/postgresql/12/main

nel mio caso si tratta di 5 GB

5.0G    /var/lib/postgresql/12/main

controlliamo, come ultima cosa, di avere abbastanza spazio disponibile per la creazione del secondo database con il comando

df -h

che mi restitusce:

Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G  1.6M  1.6G   1% /run
/dev/sda2        59G   19G   38G  34% /
tmpfs           7.9G  1.1M  7.9G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
tmpfs           1.6G     0  1.6G   0% /run/user/1000

come evidenziato ho tutto lo spazio di cui ho bisogno, BENE! possiamo iniziare

Aggiornare il sistema e aggiungere il repository PostgreSQL

ottimo veniamo alla parte di aggiornameno e installazione dei nuovi pacchetti, io durante questi aggiornamenti preferisco sempre aggiornare anche i pacchetti di sistema, ma non è un regquisto fondamentale, anche se è sicuramente una cosa “buona e giusta”

aggiorniamo quindi tutti i pacchetti del SO:

sudo apt update && sudo apt upgrade -y

aggiungiamo quindi, se necessario, il repository ufficiale di PostgreSQL, wget e gnupg2:

sudo apt install -y wget gnupg2
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/postgresql.asc
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

Aggiorniamo la lista dei pacchetti e installiamo PostgreSQL 17:

sudo apt update
sudo apt install -y postgresql-17 postgresql-client-17

NB: Se il database utilizza PL/Perl, come nel mio caso, installiamo anche il pacchetto corrispondente:

sudo apt install -y postgresql-plperl-17

Ottimo a questo punto facciamo un controllo sui pacchetti installati con “dpkg –get-selections | grep postgres” , giusto per essere sicuri, se il vostro output è simile a questo:

possiamo proseguire

Preparare la migrazione

a questo punto siamo pronti per la migrazione vera e propria: dobbiamo quindi creare il percorso per il nuovo database della versione 17 (ndr: no quel maledetto non lo fa in automatico), modificare il file di configurazione del database originale ( quello della versione 12 nel mio caso) per adeguarci agli standard di migrazione ed e eseguire la migrazione vera e propria

“cominciamo dal comincio” e fermiamo il servizio PostgreSQL:

sudo service postgresql stop

Modifichiamo il file di configurazione per ridurre il carico durante la migrazione, (questo vi eviterà tutta una serie di errori nei quali sono incappato io e che per mio buon cuore vi risparmio):

sudo nano /etc/postgresql/12/main/postgresql.conf

Cerchiamo all’interno del file, con CTRL+W e modifichiamo:

shared_buffers = 1024MB
huge_pages = try

salviamo con il solito CTRL + X, Y, Invio

creiamo quindi i nuovi percorsi per il PostgreSQL 17

sudo mkdir -p /var/lib/postgresql/17/main
sudo chown postgres:postgres /var/lib/postgresql/17/main
sudo chmod 700 /var/lib/postgresql/17/main

OTTIMO! abbiamo tutto, possiamo procedere

Avviare la migrazione

Ora possiamo eseguire l’upgrade vero e proprio dalla versione 12 all ultima disponibile sul sistema ( la 17)

sudo pg_upgradecluster 12 main

il processo fa tutto in automatico, e si mettetevi comodi perchè ci vorrà un po di tempo

Questo processo può richiedere tempo, a seconda delle dimensioni del database. Per monitorare la migrazione in tempo reale, apriamo un secondo terminale e lanciamo:

sudo watch -n 5 du -sh /var/lib/postgresql/17/main

Dobbiamo aspettare che la dimensione del nuovo database raggiunga circa quella del precedente, vista nelle fasi iniziali di questa guida (quindi circa 5 GB nel mio caso)

Verificare la migrazione

se tutto è andato per il verso giusto e se abbiamo ricevuto i messaggi di esito positivo della migrazione, una volta terminato l’upgrade, controlliamo lo stato dei cluster:

pg_lsclusters

che a questo punto ci restituirà:

Ver Cluster Port Status Owner    Data directory              Log file
12  main    5434 down   postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17-main.log

ottimo! abbiamo on-line in nuovo db e offline il vecchio

possiamo a questo puntoi andare a rieditare il file di configurazione, stavolta sulla versione nuova del DB ( la 17) per ripristinare i parametri “shared_buffers” e
“huge_pages” alla versione orinale, se lo desideriamo

sudo nano /etc/postgresql/17/main/postgresql.conf

Cerchiamo all’interno del file, con CTRL+W e modifichiamo:

shared_buffers = 2048MB
huge_pages = on

salviamo con il solito CTRL + X, Y, Invio

ottimo, ci siamo! Non ci resta che riavviare il servizio PostgreSQL per tornare operativi:

sudo service postgresql start

Eliminare il vecchio cluster (opzionale)

a questo punto a me piace fare un po di pulizia, infatti avendo la migrazione creato un secondo database rischiamo di “dimenticarci in giro” la vecchia versione 12 che, in alcuni casi potrebbe essere abbastanza ingombrante e creare quindi problemi di spazio sulla macchina

Cancellare un database in PostgreSQL è davvero facile ed è un processo ( cosi come altri database) senza appello, massima attenzione quindi su quello che stiamo facendo

Se tutto è a posto e vogliamo liberare spazio, possiamo eliminare il vecchio cluster (ovvero la verisone 12) :

sudo pg_dropcluster 12 main --stop

abbiamo finito!!

Conclusione

Seguendo questi passaggi, abbiamo aggiornato PostgreSQL alla versione 17 in sicurezza, minimizzando i rischi e garantendo il corretto funzionamento del database.

Lascia un commento

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

Torna in alto