Gestione dei dati spaziali con l'estensione Post GIS - Amazon Aurora

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.

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 di Post. GIS

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 CreateTopologydi Post. GIS

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 Per ulteriori informazioni sull'aggiornamento del motore Postgre, consulta. SQL Test di un aggiornamento del cluster database di produzione a una nuova versione principale

Puoi verificare gli aggiornamenti delle versioni dell'GISestensione Post disponibili sul tuo cluster Aurora Postgre SQL DB RDS per l'istanza DB 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 Test di un aggiornamento del cluster database di produzione a una nuova versione principale.

Versioni successive all'estensione GIS

Si consiglia di installare le versioni di tutte le estensioni, ad esempio PostGIS, elencate in Extension versions for Aurora Postgre SQL -Compatible Edition nelle Note di rilascio per Aurora Postgre. SQL Per ottenere un elenco delle versioni disponibili nella versione, utilizza il comando seguente.

SELECT * FROM pg_available_extension_versions WHERE name='postgis';

È possibile trovare informazioni sulla versione nelle seguenti sezioni delle Note di rilascio di Aurora Postgre: SQL

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
  1. Identifica la versione predefinita di Post GIS disponibile per la SQL versione Postgre sul tuo cluster Aurora Postgre DB. 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)
  2. Identifica le versioni di Post GIS installate in ogni database sull'istanza writer del tuo cluster Aurora 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
  3. 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();
  4. 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_rasterestensione 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;