Riporto le operazioni effettuate per migrare alcuni database da Postgresq-8.4 con estensione spaziale Postgis-1.5 a Postgresql-9.5 con Postgis-2.2.
Eseguire un dump dei dati con:
$ PGUSER=postgres pg_dump -Fc nome_db > nome_db.dmp
Questa operazione va fatta per ogni db presente nel cluster; si ottengono i relativi dump in formato compresso (.dmp) da utilizzare poi per l’importazione della nuova architettura.
Stoppare Postgresql-8.4 con (da root):
# /etc/init.d/postgresql stop 8.4
Installare la versione 9.5 di Postgresql e la versione 2.2 di Postgis (e dipendenze collegate) con:
# apt-get install postgresql-9.5 postgis postgis-2.2
A questo punto si potrebbe droppare il cluster della versione 8.4 con “pg_dropcluster –stop 8.4 main“. Nel mio caso ho invece preferito rimuovere Postgresql-8.4 e Postgis 1.5 con “apt-get purge postgresql-8.4*”
Creare gli utenti dei db (nel nostro caso abbiamo ricreato gli utenti che avevamo prima di effettuare la migrazione):
$ su
# su postgres
Entrare in un db (es: template1):
# psql template1
e creare gli utenti necessari:
#= CREATE USER nome_utente WITH PASSWORD ‘password_segreta’ CREATEDB CREATEUSER;
(nel nostro caso l’utente creato avra’ la facolta’ di creare database e utenti)
Creare un template apposito per i db spaziali che chiameremo “template_gis”:
#= CREATE DATABASE template_gis template=template0;
Uscire dal database template1 e (sempre come utente postgres) importare le funzioni spaziali nel database appena creato:
# psql -d template_gis -f /usr/share/postgresql/9.5/contrib/postgis2.2/postgis.sql
# psql -d template_gis -f /usr/share/postgresql/9.5/contrib/postgis2.2/spatial_ref_sys.sql
# psql -d template_gis -f /usr/share/postgresql/9.5/contrib/postgis2.2/rtpostgis.sql
In questo modo abbiamo popolato il template_gis con tutti i sistemi di riferimento spaziali e tutte le funzioni dedicate alla manipolazione di dati vettoriali (“postgis.sql” e raster “rtpostgis.sql”)
Ritornare all’interno del database template1:
# psql template1
e facciamo in mdo che il database template_gis sia un template:
#= UPDATE pg_database SET datistemplate=’t’ WHERE datname=’template_gis’;
Creare i database (uno alla volta)
#= CREATE DATABASE nome_db template=template_gis OWNER nome_utente;
Uscire dal template1 e popolare i nuovi database con l’aiuto dello script “postgis_restore.pl”:
$ /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis_restore.sql nome_db.dmp | psql nome_db