In PostgreSQL, l'aggiornamento della versione può essere eseguito in modi diversi:
Installazione dei pacchetti con una nuova versione di PostgreSQL. Questo metodo è adatto solo per gli aggiornamenti minori. Prima di eseguire l'aggiornamento, consulta le note di rilascio.
Utilizzo del programma standard pg_dumpall. È un metodo affidabile, ma può causare tempi di inattività lunghi.
Utilizzo del programma standard pg_upgrade. Un altro modo veloce per aggiornare, ma possono verificarsi errori.
Aggiornamento tramite replica logica. Questa opzione ha tempi di inattività minimi, ma è adatta solo per le versioni di PostgreSQL superiori alla 10.0. Le versioni precedenti richiedono estensioni. La scelta dipende dalla versione utilizzata sul server e dalla versione a cui desideri aggiornare.
In questo articolo esamineremo tutti i metodi di aggiornamento sopra citati.
È fondamentale comprendere le peculiarità degli aggiornamenti tra le diverse versioni.
I numeri di versione sono costituiti da due cifre, ad esempio, 10.1. La prima cifra è il numero di versione principale (10). La seconda cifra è il numero di versione minore (1).
Prima di PostgreSQL 10, i numeri di versione erano composti da tre cifre. Ad esempio, in 9.6.3, 9.6 è il numero di versione principale e 3 è il numero di versione minore.
È importante comprendere questa differenza per scegliere il metodo di aggiornamento appropriato.
Nelle versioni minori, il formato di archiviazione dei dati non cambia, quindi non ci sono problemi di compatibilità. Pertanto, la transizione da PostgreSQL 10.1 a 10.6 può avvenire molto facilmente. Per aggiornare, basta spegnere il server, sostituire i file eseguibili e riavviare il server. Tuttavia, la documentazione nota che alcune versioni potrebbero richiedere modifiche manuali. Pertanto, leggi sempre le note di rilascio prima di aggiornare.
Nelle versioni principali, il formato dei dati potrebbe cambiare. Questo rende l'aggiornamento più complesso. Sarà necessario scaricare i dati e caricarli di nuovo, utilizzare il programma pg_upgrade o utilizzare la replica logica.
Vediamo come aggiornare PostgreSQL dalla versione 14.1 alla versione 14.3 su un server Ubuntu.
PostgreSQL è disponibile di default su Ubuntu. Inizia con il comando:
sudo apt-get upgrade
Debian e Ubuntu rilasciano una sola versione di PostgreSQL per ogni versione del sistema operativo. Ad esempio, Debian Squeeze/6.0 ha solo PostgreSQL 8.4. Se hai bisogno di una versione diversa di PostgreSQL, usa i pacchetti di PGDG.
Se desideri l'ultima versione di PostgreSQL, prima devi installare il repository Postgres.
Aggiungi il repository:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Importa la chiave di firma:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Aggiorna la lista dei pacchetti nel sistema:
sudo apt-get update
Installa la versione richiesta di PostgreSQL:
sudo apt-get -y install postgresql-14.3
Per visualizzare l'elenco dei DBMS installati, esegui:
dpkg --get-selections | grep postgres
Visualizza anche l'elenco dei cluster:
pg_lsclusters
Arresta PostgreSQL prima di apportare modifiche:
sudo service postgresql stop
Quando i pacchetti di PostgreSQL sono installati, viene creato un cluster predefinito. Devi rinominare il nuovo cluster PostgreSQL in modo che non ci siano conflitti con il nome del vecchio cluster durante l'aggiornamento.
sudo pg_renamecluster 14.3 main main_pristine
Aggiorna il vecchio cluster:
sudo pg_upgradecluster 14.1 main
Avvia il servizio:
sudo service postgresql start
Controlla di nuovo l'elenco dei cluster e assicurati che il nuovo cluster funzioni:
pg_lsclusters
Elimina il vecchio cluster:
sudo pg_dropcluster 14.1 main
Se devi cambiare versione principale, usa il programma pg_dumpall. L'essenza di questo metodo è scaricare i dati da una versione principale e caricarli su un'altra.
Prima di scaricare i dati, assicurati che non vengano apportate modifiche alla base di dati in quel momento. In caso contrario, alcune modifiche potrebbero non essere incluse nel dump finale.
Ottieni il dump e scrivilo in un file:
pg_dumpall > output_file
Arresta il server:
pg_ctl stop
Cambia il nome della vecchia directory per evitare conflitti di nome:
mv /usr/local/pgsql /usr/local/pgsql.old
La vecchia directory può essere semplicemente eliminata. Ma sarebbe più saggio rinominarla per lasciare spazio al ripristino. Invece di /usr/local/pgsql, specifica il percorso della tua directory.
Installa la nuova versione dalle sorgenti. Esiste una guida dettagliata nella documentazione.
Crea un nuovo cluster:
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
Trasferisci tutte le modifiche nei file pg_hba.conf e postgresql.conf.
Avvia il server di database:
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
Ripristina i dati dal backup:
/usr/local/pgsql/bin/psql -d postgres -f output_file
Lo svantaggio di questo metodo è che il server sarà spento per un lungo periodo. Per ridurre il tempo di inattività, puoi installare il nuovo server in una directory diversa e quindi eseguire i vecchi e nuovi server su porte diverse. Per trasferire i dati, usa il comando:
pg_dumpall -p 5432 | psql -d postgres -p 5433
Invece di 5432 e 5433, specifica i numeri di porta sui quali hai eseguito i server.
Per evitare di scaricare e ricaricare i dati, usa il programma pg_upgrade. Questo programma ti consente di aggiornare più velocemente. pg_upgrade crea di nuovo le tabelle di sistema, tenendo conto delle modifiche nelle versioni più recenti di PostgreSQL. In questo caso, i vecchi file di dati vengono mantenuti. Inoltre, pg_upgrade verifica che i cluster siano compatibili.
Il programma pg_upgrade ti aiuterà ad aggiornare da PostgreSQL 8.4.X alla versione attuale del DBMS.
Esaminiamo un piano di aggiornamento generale utilizzando pg_upgrade.
Sposta il vecchio cluster. Questo deve essere fatto se la directory non è stata collegata alla versione precedente. Ad esempio, si trova in /usr/local/pgsql. Se non lo rinomini, si verificherà un conflitto durante l'aggiornamento.
Il rinominamento viene effettuato quando il server è spento con il comando:
mv /usr/local/pgsql /usr/local/pgsql.old
Costruisci la nuova versione dalle sorgenti. Adatta il configure affinché le opzioni siano compatibili con la configurazione del cluster vecchio. Prima di avviare l'aggiornamento, pg_upgrade verificherà la compatibilità delle opzioni.
Installa i nuovi file eseguibili. Per collocare il server in una directory non standard, usa il prefisso:
make prefix=/usr/local/pgsql.new install
Usa initdb per inizializzare un nuovo cluster. Controlla che le opzioni siano compatibili con quelle del vecchio cluster.
Installa i file oggetti delle estensioni. Se sono disponibili aggiornamenti, pg_upgrade creerà automaticamente uno script per il loro successivo utilizzo.
Trasferisci i file di ricerca del testo completo.
Configura l'autenticazione peer in pg_hba.conf. Questo è necessario perché pg_upgrade si connetterà più volte agli host vecchi e nuovi.
Controlla che i vecchi e nuovi server siano spenti:
pg_ctl -D /opt/PostgreSQL/9.6 stop
pg_ctl -D /opt/PostgreSQL/14 stop
Esegui pg_upgrade dal nuovo server. Prima esegui il programma in modalità di controllo aggiungendo l'opzione: pg_upgrade --check. In risposta, riceverai un elenco degli aggiustamenti da fare manualmente dopo l'aggiornamento.
Se hai modificato il file pg_hba.conf, ripristinalo al suo stato precedente. A volte, altre configurazioni sul nuovo cluster devono essere modificate per corrispondere ai parametri del vecchio cluster.
Avvia il server.
Se sei soddisfatto del risultato, elimina il vecchio cluster.
A partire dalla versione 10 di PostgreSQL, abbiamo un metodo per la replica logica degli oggetti di dati e delle loro modifiche. Si basa sull'uso di identificatori di replica; solitamente, sono le chiavi primarie.
La replica logica utilizza il modello di pubblicazione-abbonamento. L'utente crea un'istantanea del database pubblicato e la copia nel sottoscrittore. Nella documentazione PostgreSQL, uno degli scenari tipici per utilizzare la replica logica è proprio la replica tra diverse versioni principali di PostgreSQL.
Il server di backup può essere posizionato sullo stesso host o su un altro. Una volta completata la sincronizzazione, sono disponibili diverse opzioni. Ad esempio, puoi rendere il nuovo server il principale e spegnere il vecchio.
Il principale vantaggio della replica logica è il tempo di inattività minimo. L'interruzione del server, in alcuni casi, è limitata a pochi secondi.
Abbiamo esaminato i metodi universali per aggiornare PostgreSQL a una nuova versione principale e aggiornare all'interno di una versione principale.
Con questa guida, puoi selezionare il metodo che funziona meglio per il tuo caso specifico e aggiornare la tua versione attuale di PostgreSQL.