User Tools

Site Tools


tecnica:gps_cartografia_gis:postgis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tecnica:gps_cartografia_gis:postgis [2017/11/14 21:26] – [PostGIS 2.3] niccolotecnica:gps_cartografia_gis:postgis [2017/11/15 16:02] (current) – [Migrazione da PostgreSQL 9.4/PostGIS 2.1] niccolo
Line 15: Line 15:
 ==== Creazione di un database geografico ==== ==== Creazione di un database geografico ====
  
-==== Restore di un dump da PostgreSQL 9.4 ====+È necessario collegarsi al database con i privilegi di database administrator:
  
 +<code>
 +# su - postgres
 +> psql
 +postgres=#
 +</code>
 +
 +quindi si crea un **utente** e un **database** su cui l'utente ha pieni poteri. Dopo essersi connessi al database si crea al suo interno le estensioni **PostGIS**:
 +
 +<code>
 +CREATE USER "strade" PASSWORD 'MySecret';
 +CREATE DATABASE strade OWNER strade
 +    TEMPLATE template0 LC_COLLATE = 'it_IT.UTF-8' LC_CTYPE = 'it_IT.UTF-8'
 +    ENCODING 'UTF8';
 +\connect strade
 +CREATE EXTENSION postgis;
 +</code>
 +
 +A differenza delle vecchie versioni di PostGIS (es. la 1.3), non c'è da impazzire con i permessi da assegnare alle tabelle speciali. La **''spatial_ref_sys''** (che contiene le definizioni dei sistemi di riferimento) va bene che sia in sola lettura, la **''geometry_columns''** e la **''geography_columns''** sono adesso delle semplici VIEW.
 +==== Migrazione da PostgreSQL 9.4/PostGIS 2.1 ====
 +
 +La **migrazione** di un database dalla vecchia versione **postgresql-9.4-postgis-2.1** alla nuova **postgresql-9.6-postgis-2.3** è relativamente semplice, il tutto si risolve nell'esecuzione di **pg_dump** sulla vecchia versione e **pg_restore** sulla nuova.
 +
 +Nelle versioni precedenti di PostGIS (es. la 1.3) c'era da impazzire con gli **oggetti creati dall'estensione PostGIS**; in pratica le funzioni, gli operatori, i tipi dati, ecc. venivano regolarmente salvati nel dump, ma al momento del restore **bisognava escluderli** perché altrimenti andavano in conflitto con gli analoghi già presenti nel nuovo database, in cui era stata creata l'estensione del nuovo PostGIS.
 +
 +Con la versione 2.x di PostGIS il dump conterrà solo i dati utente e il restore è molto semplificato. Sulla vecchia installazione si esegue il **dump** del database:
 +
 +<code>
 +su - postgres
 +pg_dump -Fc strade > strade.dump
 +</code>
 +
 +Sulla nuova installazione si esegue il **restore** a nome dell'utente proprietario del nuovo database (utente non privilegiato). Nel nostro esempio il vecchio database e il nuovo coesistono sullo stesso host, la nuova istanza quindi gira sulla porta **5433/TCP**:
 +
 +<code>
 +pg_restore --port 5433 -U strade -W -h 127.0.0.1 -d strade strade.dump
 +</code>
 +
 +Poiché l'estensione PostGIS è stata attivata dal database administrator, il restore effettuato come utente non privilegiato genera degli errori:
 +
 +<code>
 +pg_restore: [archiver (db)] Error from TOC entry 3407; 0 0 COMMENT EXTENSION plpgsql 
 +pg_restore: [archiver (db)] Error from TOC entry 3408; 0 0 COMMENT EXTENSION postgis 
 +pg_restore: [archiver (db)] Error from TOC entry 3199; 0 88843 TABLE DATA spatial_ref_sys postgres
 +</code>
 +
 +sono errori che possono essere ignorati, poiché le estensioni 'plpgsql' e 'postgis' e la tabella ''spatial_ref_sys'' non devono essere in realtà recuperati dal vecchio dump.
 ===== PostGIS 1.3 ===== ===== PostGIS 1.3 =====
  
tecnica/gps_cartografia_gis/postgis.1510694782.txt.gz · Last modified: 2017/11/14 21:26 by niccolo