Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gestione dei dati spaziali con l'estensione Post GIS
Post GIS è un'estensione di Postgre SQL per l'archiviazione e la gestione delle informazioni spaziali. Per saperne di più su PostGIS, vedi Post.net. GIS
A partire dalla versione 10.5, Postgre SQL supporta la libreria libprotobuf 1.3.0 usata da Post GIS per lavorare con i dati delle tile vettoriali map box.
La configurazione dell'estensione Post richiede dei privilegi. GIS rds_superuser
Ti consigliamo di creare un utente (ruolo) per gestire l'GISestensione Post e i tuoi dati spaziali. L'GISestensione Post e i relativi componenti aggiungono migliaia di funzioni a SQL Postgre. Prendi in considerazione la possibilità di creare GIS l'estensione Post in un proprio schema, se ciò ha senso per il tuo caso d'uso. Nell'esempio seguente viene illustrato come installare l'estensione nel proprio database, ma questa operazione non è necessaria.
Argomenti
- Passaggio 1: crea un utente (ruolo) per gestire l'GISestensione Post
- Passaggio 2: carica le estensioni Post GIS
- Passaggio 3: Trasferimento della proprietà delle estensioni
- Fase 4: Trasferire la proprietà degli GIS oggetti Post
- Passaggio 5: Verificare le estensioni
- Passaggio 6: Aggiorna l'GISestensione Post
- Versioni successive all'GISestensione
- Aggiornamento del Post 2 al Post 3 GIS GIS
Passaggio 1: crea un utente (ruolo) per gestire l'GISestensione Post
Innanzitutto, connettiti alla tua istanza SQL DB RDS per Postgre come utente con privilegi. rds_superuser
Se hai mantenuto il nome di default durante la configurazione dell'istanza, esegui la connessione come postgres
.
psql --host=
111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password
Crea un ruolo separato (utente) per amministrare l'estensione Post. GIS
postgres=>
CREATE ROLE
gis_admin
LOGIN PASSWORD 'change_me
';CREATE ROLE
Concedi a questo ruolo i privilegi rds_superuser
per consentire l'installazione dell'estensione.
postgres=>
GRANT rds_superuser TO
gis_admin
;GRANT
Crea un database da utilizzare per gli GIS artefatti del tuo Post. Questa fase è facoltativa. Oppure puoi creare uno schema nel tuo database utenti per le GIS estensioni Post, ma anche questo non è necessario.
postgres=>
CREATE DATABASE
lab_gis
;CREATE DATABASE
Concedi a gis_admin
tutti i privilegi per il database lab_gis
.
postgres=>
GRANT ALL PRIVILEGES ON DATABASE lab_gis TO gis_admin;
GRANT
Esci dalla sessione e riconnettiti alla tua istanza SQL DB RDS for Postgre come. gis_admin
postgres=>
psql --host=
111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=gis_admin
--password --dbname=lab_gis
Password for user gis_admin:...
lab_gis=>
Continua a configurare l'estensione come descritto nei passaggi successivi.
Passaggio 2: carica le estensioni Post GIS
L'GISestensione Post include diverse estensioni correlate che collaborano per fornire funzionalità geospaziali. A seconda del caso d'uso, è possibile che le estensioni create in questo passaggio non siano tutte necessarie.
Usa CREATE EXTENSION
le istruzioni per caricare le estensioni Post. GIS
CREATE EXTENSION postgis;
CREATE EXTENSION
CREATE EXTENSION postgis_raster;
CREATE EXTENSION
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION
CREATE EXTENSION postgis_topology;
CREATE EXTENSION
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION
È possibile verificare i risultati eseguendo la SQL query mostrata nell'esempio seguente, che elenca le estensioni e i relativi proprietari.
SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1;
List of schemas Name | Owner --------------+----------- public | postgres tiger | rdsadmin tiger_data | rdsadmin topology | rdsadmin (4 rows)
Passaggio 3: Trasferimento della proprietà delle estensioni
ALTERSCHEMAUtilizzate le istruzioni per trasferire la proprietà degli schemi al gis_admin
ruolo.
ALTER SCHEMA tiger OWNER TO gis_admin;
ALTER SCHEMA
ALTER SCHEMA tiger_data OWNER TO gis_admin;
ALTER SCHEMA
ALTER SCHEMA topology OWNER TO gis_admin;
ALTER SCHEMA
È possibile confermare il cambio di proprietà eseguendo la seguente SQL query. Oppure è possibile utilizzare il meta-comando \dn
dalla riga di comando psql.
SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1;
List of schemas Name | Owner --------------+--------------- public | postgres tiger | gis_admin tiger_data | gis_admin topology | gis_admin (4 rows)
Fase 4: Trasferire la proprietà degli GIS oggetti Post
Utilizzate la seguente funzione per trasferire la proprietà degli GIS oggetti Post al gis_admin
ruolo. Eseguire la seguente istruzione dal prompt di psql per creare la funzione.
CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$;
CREATE FUNCTION
Successivamente, eseguire la seguente query per eseguire la funzione exec
che a sua volta esegue le istruzioni e altera le autorizzazioni.
SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO gis_admin;') FROM ( SELECT nspname, relname FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) WHERE nspname in ('tiger','topology') AND relkind IN ('r','S','v') ORDER BY relkind = 'S') s;
Passaggio 5: Verificare le estensioni
Per evitare di dover specificare il nome dello schema, aggiungi lo schema tiger
al percorso di ricerca usando il seguente comando.
SET search_path=public,tiger;
SET
Verificate lo tiger
schema utilizzando la seguente SELECT istruzione.
SELECT address, streetname, streettypeabbrev, zip FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;
address | streetname | streettypeabbrev | zip ---------+------------+------------------+------- 1 | Devonshire | Pl | 02109 (1 row)
Per saperne di più su questa estensione, consulta Tiger Geocoder nella documentazione
Verifica lo schema topology
usando la seguente istruzione SELECT
. Questa richiama la funzione createtopology
per registrare un nuovo oggetto topologia (my_new_topo) con l'identificatore di riferimento spaziale specificato (26986) e la tolleranza predefinita (0,5). Per saperne di più, consulta la documentazione CreateTopology
SELECT topology.createtopology('my_new_topo',26986,0.5);
createtopology ---------------- 1 (1 row)
Passaggio 6: Aggiorna l'GISestensione Post
Ogni nuova versione di Postgre SQL supporta una o più versioni dell'GISestensione Post compatibili con quella versione. L'aggiornamento del SQL motore Postgre a una nuova versione non aggiorna automaticamente l'estensione Post. GIS Prima di aggiornare il SQL motore Postgre, in genere aggiorni Post GIS alla versione più recente disponibile per la versione corrente di Postgre. SQL Per informazioni dettagliate, consultare Versioni successive all'estensione GIS.
Dopo l'aggiornamento del SQL motore Postgre, aggiorni nuovamente l'GISestensione Post, alla versione supportata per la versione del motore Postgre appena aggiornata. SQL Come eseguire l'aggiornamento a una versione principale.
Puoi verificare gli aggiornamenti delle versioni dell'GISestensione Post disponibili sul tuo Postgre SQL in qualsiasi momento. Per farlo, esegui il comando seguente. Questa funzione è disponibile con Post GIS 2.5.0 e versioni successive.
SELECT postGIS_extensions_upgrade();
Se la tua applicazione non supporta l'ultima GIS versione di Post, puoi installare una versione precedente di Post GIS disponibile nella tua versione principale come segue.
CREATE EXTENSION postgis VERSION "2.5.5";
Se desideri eseguire l'aggiornamento a una GIS versione di Post specifica da una versione precedente, puoi anche utilizzare il seguente comando.
ALTER EXTENSION postgis UPDATE TO "2.5.5";
A seconda della versione da cui si esegue l'aggiornamento, potrebbe essere necessario utilizzare nuovamente questa funzione. Il risultato della prima esecuzione della funzione determina se è necessaria una funzione di aggiornamento aggiuntiva. Ad esempio, questo è il caso dell'aggiornamento da Post GIS 2 a Post GIS 3. Per ulteriori informazioni, consulta Aggiornamento da Post 2 a Post 3 GIS GIS.
Se hai aggiornato questa estensione per prepararti all'aggiornamento di una versione principale del SQL motore Postgre, puoi continuare con altre attività preliminari. Per ulteriori informazioni, consulta Come eseguire l'aggiornamento a una versione principale.
Versioni successive all'estensione GIS
Si consiglia di installare le versioni di tutte le estensioni, ad esempio PostGIS, elencate in . SQL Versioni di estensione per Amazon RDS for Postgre SQL nelle note di rilascio di Amazon RDS for SQL Postgre. Per ottenere un elenco delle versioni disponibili nella versione, utilizza il comando seguente.
SELECT * FROM pg_available_extension_versions WHERE name='postgis';
Puoi trovare informazioni sulla versione nelle seguenti sezioni delle note di SQLrilascio di Amazon RDS for Postgree:
Aggiornamento da Post 2 a Post 3 GIS GIS
A partire dalla versione 3.0, la funzionalità Post GIS raster è ora un'estensione separata,. postgis_raster
Questa estensione dispone di un proprio percorso di installazione e aggiornamento. Ciò rimuove dall'estensione postgis
core dozzine di funzioni, tipi di dati e altri artefatti necessari per l'elaborazione di immagini raster. Ciò significa che se il caso d'uso non richiede l'elaborazione raster, non è necessario installare l'estensione postgis_raster
.
Nel seguente esempio di aggiornamento, il primo comando di aggiornamento estrae la funzionalità raster nell'estensione postgis_raster
. È quindi necessario un secondo comando di aggiornamento per eseguire l'aggiornamento di postgis_raster
alla nuova versione.
Per eseguire l'aggiornamento da Post GIS 2 a Post GIS 3
Identifica la versione predefinita di Post GIS disponibile per la SQL versione Postgre sul tuo cluster Postgre DB. SQL RDSper un'istanza DB di Postgre. SQL A questo scopo, esegui la query seguente.
SELECT * FROM pg_available_extensions WHERE default_version > installed_version;
name | default_version | installed_version | comment ---------+-----------------+-------------------+------------------------------------------------------------ postgis | 3.1.4 | 2.3.7 | PostGIS geometry and geography spatial types and functions (1 row)
Identifica le versioni di Post GIS installate in ogni database sull' DB. la tua istanza RDS per SQL Postgre DB. In altre parole, esegui la query su ogni database utente come riportato di seguito.
SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" FROM pg_catalog.pg_extension e LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass WHERE e.extname LIKE '%postgis%' ORDER BY 1;
Name | Version | Schema | Description ---------+---------+--------+--------------------------------------------------------------------- postgis | 2.3.7 | public | PostGIS geometry, geography, and raster spatial types and functions (1 row)
Questa mancata corrispondenza tra la versione predefinita (Post GIS 3.1.4) e la versione installata (Post GIS 2.3.7) significa che è necessario aggiornare l'estensione Post. GIS
ALTER EXTENSION postgis UPDATE;
ALTER EXTENSION WARNING: unpackaging raster WARNING: PostGIS Raster functionality has been unpackaged
Esegui la seguente query per verificare che la funzionalità raster sia ora contenuta nel proprio pacchetto.
SELECT probin, count(*) FROM pg_proc WHERE probin LIKE '%postgis%' GROUP BY probin;
probin | count --------------------------+------- $libdir/rtpostgis-2.3 | 107 $libdir/postgis-3 | 487 (2 rows)
L'output mostra che c'è ancora una differenza tra le versioni. Le GIS funzioni Post sono la versione 3 (postgis-3), mentre le funzioni raster (rtpostgis) sono la versione 2 (rtpostgis-2.3). Per completare l'aggiornamento, esegui nuovamente il comando di aggiornamento, come riportato di seguito.
postgres=>
SELECT postgis_extensions_upgrade();Puoi ignorare i messaggi di avviso in sicurezza. Esegui nuovamente la seguente query per verificare che l'aggiornamento sia stato completato. L'aggiornamento è completo quando Post GIS e tutte le estensioni correlate non sono contrassegnate come da aggiornare.
SELECT postgis_full_version();
Utilizza la seguente query per visualizzare il processo di aggiornamento completato e le estensioni impacchettate separatamente e verifica che le relative versioni corrispondano.
SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" FROM pg_catalog.pg_extension e LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass WHERE e.extname LIKE '%postgis%' ORDER BY 1;
Name | Version | Schema | Description ----------------+---------+--------+--------------------------------------------------------------------- postgis | 3.1.5 | public | PostGIS geometry, geography, and raster spatial types and functions postgis_raster | 3.1.5 | public | PostGIS raster types and functions (2 rows)
L'output mostra che l'estensione Post GIS 2 è stata aggiornata a Post GIS 3
postgis
ed entrambe, nonché l'postgis_raster
estensione ora separata, sono alla versione 3.1.5.
Al termine dell'aggiornamento, se non prevedi di utilizzare la funzionalità raster, puoi rimuovere l'estensione come segue.
DROP EXTENSION postgis_raster;