Table of Contents

PostgreSQL/PostGIS upgrade da 8.2 a 8.3

Operazioni senza interruzione di servizio

Installazione di PostgreSQL

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

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.

Dump e restore dei database geografici