Questa operazione crea un cluster di due database, la vecchia versione 8.2 sulla porta 5432 e la nuova versione 8.3 sulla porta 5433 (il numero della porta TCP è configurato in /etc/postgresql/8.3/main/postgresql.conf
).
Bisogna configurare la nuova versione, in particolare /etc/postgresql/8.3/main/pg_hba.conf
per le ACL ecc.
Si può fare sia scaricando il singolo pacchetto e installandolo con dpkg -i
, oppure usando il pinning come spiegato ottimamente in questo howto.
Conviene creare il template_gis nel nuovo database:
createdb --port 5433 template_gis createlang --port 5433 plpgsql -d template_gis psql --port 5433 template_gis -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql psql --port 5433 template_gis -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql psql --port 5433 postgres=# update pg_database SET datistemplate='true' where datname='template_gis';
Mettere il database in read-only prima di effettuare i dump. Chiudere le porte sul firewall può essere un sistema…
Purtroppo non si può usare il comando pg_dumpall(1)
per fare il dump in un colpo solo di tutti i database, i ruoli e i tablespace, infatti i database con le estensioni PostGIS devono essere recuperati usando lo script postgis_restore.pl
(vedi avanti).
Quindi servono tre passaggi:
Con questo comando si migrano tutti gli oggetti globali dal vecchio cluster al nuovo (in particolar modo si migrano gli utenti):
pg_dumpall --port 5432 --globals-only | /usr/lib/postgresql/8.3/bin/psql --port 5433 -d postgres
I database che non contengono funzioni aggiuntive (ad esempio le estensioni PostGIS) possono essere migrati con comandi del tipo:
pg_dump --port 5432 --create dbname | /usr/lib/postgresql/8.3/bin/psql --port 5433 --single-transaction
L'opzione --single-transaction
ha lo scopo di annullare completamente l'operazione di restore se si verifica anche un solo errore.