Table of Contents
PostgreSQL/PostGIS upgrade da 8.2 a 8.3
Operazioni senza interruzione di servizio
Installazione di PostgreSQL
- postgresql-8.3
- postgresql-client-8.3
- postgresql-doc-8.3
- postgresql-contrib-8.3
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.
Installazione PostGIS
- postgresql-8.3-postgis
Si può fare sia scaricando il singolo pacchetto e installandolo con dpkg -i
, oppure usando il pinning come spiegato ottimamente in questo howto.
Creazione del template_gis
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';
Operazioni da eseguire in stato read-only
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:
Dump e restore di roles e tablespaces
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
Dump e restore dei database non geografici
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.