L'installazione dei pacchetti Debian (Lenny) di PostgreSQL gestisce la presenza di versioni differenti del database. Ad esempio si può installare la versione 8.2 insieme alla versione 8.1. Un elenco indicativo dei pacchetti da installare per una determinata versione:
Al termine dell'installazione si verificano le istanze in esecuzione:
postgres@paros:~$ pg_lsclusters Version Cluster Port Status Owner Data directory Log file 8.1 main 5432 online postgres /var/lib/postgresql/8.1/main /var/log/postgresql/postgresql-8.1-main.log 8.2 main 5433 online postgres /var/lib/postgresql/8.2/main /var/log/postgresql/postgresql-8.2-main.log
Conviene rivolgersi al server con il client psql della stessa versione. Se si esegue semplicemente psql
, Debian sceglie la versione da avviare tramite il meccanismo delle alternatives. Per forzare una determinata versione si richiama il percorso completo:
/usr/lib/postgresql/8.2/bin/psql --port 5433
Debian mette a disposizione pg_wrapper. Ogni comando Postgres (psql, pg_dump, …) è in realtà un link a tale programma, che provvede a determinare a quale istanza del database connettersi. L'azione predefinita è quella di connettersi al database in ascolto sulla porta 5432. Ecco come indicare esplicitamente a quale cluster collegarsi:
psql --cluster 8.2/main
Teoricamente c'è un sistema per passare tutti i database dal vecchio 8.1 al nuovo 8.2. Si tratta di eliminare il nuovo 8.2 (che dovrebbe essere vuoto, poiché appena installato) e fare l'upgrade del vecchio 8.1:
su - postgres pg_dropcluster --stop 8.2 main pg_upgradecluster 8.1 main
Al termine il vecchio cluster 8.1 viene configurato per rispondere sulla porta TCP 5433 e quello nuovo sulla porta standard 5432. Il vecchio cluster inoltre viene disattivato impostando manual nel file /etc/postgresql/8.1/main/start.conf
. Eventualmente ripristinare il valore di auto.
NOTA: come riporta anche la man page di pg_upgradecluster, alcune estensioni di PostgreSQL - tipo PostGIS - non si devono upgradare in questo modo, perché esistono funzioni oppure tabelle con metadati che devono essere ricreate o aggiornate in altro modo.