===== 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 ===