Verwaltung von Geodaten mit der GIS Post-Erweiterung - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwaltung von Geodaten mit der GIS Post-Erweiterung

Post GIS ist eine Erweiterung von Postgre SQL zum Speichern und Verwalten von Geoinformationen. Weitere Informationen zu Post finden Sie GIS unter GISPost.net.

Ab Version 10.5 SQL unterstützt Postgre die Bibliothek libprotobuf 1.3.0, die von Post GIS für die Arbeit mit Vektorkacheldaten von Mapboxen verwendet wird.

Für die Einrichtung der Post-Erweiterung sind Rechte erforderlich. GIS rds_superuser Wir empfehlen Ihnen, einen Benutzer (eine Rolle) für die Verwaltung der GIS Post-Erweiterung und Ihrer Geodaten zu erstellen. Die GIS Post-Erweiterung und die zugehörigen Komponenten erweitern Postgre SQL um Tausende von Funktionen. Erwägen Sie, die GIS Post-Erweiterung in einem eigenen Schema zu erstellen, wenn dies für Ihren Anwendungsfall sinnvoll ist. Das folgende Beispiel zeigt, wie die Erweiterung in einer eigenen Datenbank installiert wird. Dies ist jedoch nicht erforderlich.

Schritt 1: Erstellen Sie einen Benutzer (eine Rolle) zur Verwaltung der GIS Post-Erweiterung

Stellen Sie zunächst als Benutzer mit rds_superuser Rechten eine Verbindung zu Ihrer RDS for SQL Postgre-DB-Instance her. Wenn Sie beim Einrichten Ihrer Instance den Standardnamen beibehalten haben, stellen Sie eine Verbindung als postgres her.

psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

Erstellen Sie eine separate Rolle (Benutzer), um die GIS Post-Erweiterung zu verwalten.

postgres=> CREATE ROLE gis_admin LOGIN PASSWORD 'change_me'; CREATE ROLE

Gewähren Sie dieser Rolle rds_superuser-Berechtigungen, damit die Rolle die Erweiterung installieren kann.

postgres=> GRANT rds_superuser TO gis_admin; GRANT

Erstellen Sie eine Datenbank, die Sie für Ihre GIS Post-Artefakte verwenden können. Dieser Schritt ist optional. Oder Sie können in Ihrer Benutzerdatenbank ein Schema für die GIS Post-Erweiterungen erstellen, aber das ist auch nicht erforderlich.

postgres=> CREATE DATABASE lab_gis; CREATE DATABASE

Gewähren Sie gis_admin alle Berechtigungen für die lab_gis-Datenbank.

postgres=> GRANT ALL PRIVILEGES ON DATABASE lab_gis TO gis_admin; GRANT

Beenden Sie die Sitzung und stellen Sie erneut eine Verbindung zu Ihrer RDS for SQL Postgre-DB-Instance als her. 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=>

Fahren Sie mit der Einrichtung der Erweiterung fort, wie in den nächsten Schritten beschrieben.

Schritt 2: Laden Sie die Post-Erweiterungen GIS

Die GIS Post-Erweiterung umfasst mehrere verwandte Erweiterungen, die zusammenarbeiten, um Geodatenfunktionen bereitzustellen. Je nach Anwendungsfall benötigen Sie möglicherweise nicht alle Erweiterungen, die Sie in diesem Schritt erstellt haben.

Verwenden Sie CREATE EXTENSION Anweisungen, um die GIS Post-Erweiterungen zu laden.

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

Sie können die Ergebnisse überprüfen, indem Sie die im folgenden Beispiel gezeigte SQL Abfrage ausführen, in der die Erweiterungen und ihre Besitzer aufgelistet sind.

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)

Schritt 3: Übertragung der Inhaberschaft an den Erweiterungsschemas

Verwenden Sie die ALTER SCHEMA Anweisungen, um das Eigentum an den Schemas auf die gis_admin Rolle zu übertragen.

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

Sie können den Eigentümerwechsel bestätigen, indem Sie die folgende SQL Abfrage ausführen. Oder Sie können den Metabefehl \dn über die psql-Befehlszeile verwenden.

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)

Schritt 4: Übertragen Sie den Besitz der GIS Post-Tabellen

Anmerkung

Ändern Sie nicht die Inhaberschaft der GIS Post-Funktionen. Ein ordnungsgemäßer Betrieb und future Upgrades von Post GIS setzen voraus, dass diese Funktionen das ursprüngliche Eigentum behalten. Weitere Informationen zu GIS Post-Berechtigungen finden Sie unter SQLPostgre-Sicherheit.

Verwenden Sie die folgende Funktion, um das Eigentum an den GIS Post-Tabellen auf die gis_admin Rolle zu übertragen. Führen Sie die folgende Anweisung aus der psql-Aufforderung aus, um die Funktion zu erstellen.

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$; CREATE FUNCTION

Führen Sie als Nächstes die folgende Abfrage aus, um die exec-Funktion auszuführen, die wiederum die Anweisungen ausführt und die Berechtigungen ändert.

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;

Schritt 5: Testen der Erweiterungen

Um zu vermeiden, dass der Schemaname angegeben werden muss, fügen Sie das tiger-Schema Ihrem Suchpfad unter Verwendung des folgenden Befehls hinzu.

SET search_path=public,tiger; SET

Testen Sie das tiger Schema mithilfe der folgenden SELECT Anweisung.

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)

Weitere Informationen zu dieser Erweiterung finden Sie unter Tiger Geocoder in der GIS Post-Dokumentation.

Testen Sie den Zugriff auf das topology-Schema, indem Sie folgende SELECT-Anweisung verwenden. Das ruft die createtopology-Funktion zum Registrieren eines neuen Topologieobjekts (my_new_topo) mit der angegebenen Raumbezugskennung (26986) und der Standardtoleranz (0,5) auf. Weitere Informationen finden Sie CreateTopologyin der GIS Post-Dokumentation.

SELECT topology.createtopology('my_new_topo',26986,0.5); createtopology ---------------- 1 (1 row)

Schritt 6: Aktualisieren Sie die GIS Post-Erweiterung

Jede neue Version von Postgre SQL unterstützt eine oder mehrere Versionen der GIS Post-Erweiterung, die mit dieser Version kompatibel sind. Durch ein Upgrade der SQL Postgre-Engine auf eine neue Version wird die GIS Post-Erweiterung nicht automatisch aktualisiert. Bevor Sie die SQL Postgre-Engine aktualisieren, aktualisieren Sie Post normalerweise GIS auf die neueste verfügbare Version für die aktuelle SQL Postgre-Version. Details hierzu finden Sie unter Versionen nach GIS der Erweiterung.

Nach dem Upgrade der SQL Postgre-Engine aktualisieren Sie die GIS Post-Erweiterung erneut auf die Version, die für die neu aktualisierte SQL Postgre-Engine-Version unterstützt wird. So führen Sie ein Hauptversions-Upgrade RDS für Postgre durch SQL.

Sie können jederzeit auf Ihrem nach verfügbaren Updates der GIS Post-Erweiterungsversion suchen. Führen Sie dazu den folgenden Befehl aus. Diese Funktion ist mit Post GIS 2.5.0 und höheren Versionen verfügbar.

SELECT postGIS_extensions_upgrade();

Wenn Ihre Anwendung die neueste GIS Post-Version nicht unterstützt, können Sie eine ältere Version von Post, GIS die in Ihrer Hauptversion verfügbar ist, wie folgt installieren.

CREATE EXTENSION postgis VERSION "2.5.5";

Wenn Sie von einer älteren Version auf eine bestimmte GIS Post-Version aktualisieren möchten, können Sie auch den folgenden Befehl verwenden.

ALTER EXTENSION postgis UPDATE TO "2.5.5";

Abhängig von der Version, von der Sie ein Upgrade durchführen, müssen Sie diese Funktion möglicherweise noch einmal verwenden. Das Ergebnis des ersten Durchlaufs der Funktion bestimmt, ob eine zusätzliche Upgrade-Funktion benötigt wird. Dies ist beispielsweise bei einem Upgrade von Post GIS 2 auf Post GIS 3 der Fall. Weitere Informationen finden Sie unter Aktualisierung von Post GIS 2 auf Post 3 GIS.

Wenn Sie diese Erweiterung aktualisiert haben, um sich auf ein Upgrade der Hauptversion der SQL Postgre-Engine vorzubereiten, können Sie mit anderen vorbereitenden Aufgaben fortfahren. Weitere Informationen finden Sie unter So führen Sie ein Hauptversions-Upgrade RDS für Postgre durch SQL.

Versionen nach GIS der Erweiterung

Wir empfehlen, dass Sie die Versionen aller Erweiterungen GIS wie Post installieren, die unter Postgre aufgeführt sind. SQL Erweiterungsversionen für Amazon RDS for Postgre SQL in den SQLVersionshinweisen zu Amazon RDS for Postgre. Sie können mithilfe des folgenden Befehls auflisten, welche Versionen in Ihrer Version verfügbar sind.

SELECT * FROM pg_available_extension_versions WHERE name='postgis';

Versionsinformationen finden Sie in den folgenden Abschnitten der SQLVersionshinweise zu Amazon RDS for Postgre:

Aktualisierung von Post GIS 2 auf Post 3 GIS

Ab Version 3.0 ist die GIS Post-Raster-Funktionalität jetzt eine separate Erweiterungpostgis_raster. Diese Erweiterung hat einen eigenen Installations- und Upgrade-Pfad. Dadurch werden Dutzende von Funktionen, Datentypen und anderen Artefakten, die für die Rasterbildverarbeitung erforderlich sind, aus der postgis-Kernerweiterung entfernt. Das heißt, wenn Ihr Anwendungsfall keine Raster-Verarbeitung erfordert, müssen Sie die postgis_raster-Erweiterung nicht installieren.

Im folgenden Upgrade-Beispiel extrahiert der erste Upgrade-Befehl die Raster-Funktionalität in die postgis_raster-Erweiterung. Ein zweiter Upgrade-Befehl ist dann erforderlich, um ein Upgrade von postgis_raster auf die neue Version durchzuführen.

Um von Post GIS 2 auf Post GIS 3 zu aktualisieren
  1. Identifizieren Sie die Standardversion von PostGIS, die für die SQL Postgre-Version auf Ihrem verfügbar ist. RDSfür die Postgre-DB-Instance. SQL Führen Sie dazu die folgende Abfrage durch.

    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. Identifizieren Sie die Versionen von Post, die in jeder Datenbank auf installiert sind. Ihre RDS für SQL Postgre-DB-Instance. Anders gesagt: Fragen Sie jede Benutzerdatenbank wie folgt ab.

    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)

    Diese Diskrepanz zwischen der Standardversion (Post GIS 3.1.4) und der installierten Version (Post GIS 2.3.7) bedeutet, dass Sie die Post-Erweiterung aktualisieren müssen. GIS

    ALTER EXTENSION postgis UPDATE; ALTER EXTENSION WARNING: unpackaging raster WARNING: PostGIS Raster functionality has been unpackaged
  3. Führen Sie die folgende Abfrage aus, um sicherzustellen, dass sich die Raster-Funktionalität jetzt in einem eigenen Paket befindet.

    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)

    Die Ausgabe zeigt, dass es immer noch einen Unterschied zwischen den Versionen gibt. Die GIS Post-Funktionen sind Version 3 (postgis-3), während die Raster-Funktionen (rtpostgis) Version 2 (rtpostgis-2.3) sind. Um das Upgrade abzuschließen, führen Sie den Upgrade-Befehl erneut wie folgt aus.

    postgres=> SELECT postgis_extensions_upgrade();

    Die Warnmeldungen können Sie ohne Bedenken ignorieren. Führen Sie die folgende Abfrage erneut aus, um zu überprüfen, ob das Upgrade abgeschlossen ist. Das Upgrade ist abgeschlossen, wenn Post GIS und alle zugehörigen Erweiterungen nicht als aktualisierungsbedürftig gekennzeichnet sind.

    SELECT postgis_full_version();
  4. Verwenden Sie die folgende Abfrage, um den abgeschlossenen Upgrade-Vorgang und die separat gepackten Erweiterungen anzuzeigen und zu überprüfen, ob ihre Versionen übereinstimmen.

    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)

    Die Ausgabe zeigt, dass die Post GIS 2-Erweiterung auf Post GIS 3 aktualisiert wurde und dass beide postgis und die jetzt separate postgis_raster Erweiterung Version 3.1.5 sind.

Wenn Sie nach Abschluss dieses Upgrades die Raster-Funktionalität nicht verwenden möchten, können Sie die Erweiterung wie folgt löschen.

DROP EXTENSION postgis_raster;