===== 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 [[http://jaqque.sbih.org/kplug/apt-pinning.html|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 ===