Verwalten von Geodaten mit der PostGIS-Erweiterung - Amazon Aurora

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.

Verwalten von Geodaten mit der PostGIS-Erweiterung

PostGIS ist eine Erweiterung von PostgreSQL zur Speicherung und Verwaltung von Geodaten. Weitere Informationen zu PostGIS finden Sie unter PostGIS.net.

Ab Version 10.5 unterstützt PostgreSQL die libprotobuf-1.3.0-Bibliothek, die von PostGIS für die Arbeit mit Vektorkacheldaten der Kartenbox verwendet wird.

Für das Einrichten der PostGIS-Erweiterung sind rds_superuser-Berechtigungen erforderlich. Wir empfehlen Ihnen, einen Benutzer (Rolle) zum Verwalten der PostGIS-Erweiterung und Ihrer räumlichen Daten zu erstellen. Die PostGIS-Erweiterung und ihre zugehörigen Komponenten fügen PostgreSQL Tausende von Funktionen hinzu. Erstellen Sie die PostGIS-Erweiterung ggf. in einem eigenen Schema, 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 (Rolle) zum Verwalten der PostGIS-Erweiterung.

Zuerst stellen Sie eine Verbindung mit Ihrer DB-Instance von RDS für PostgreSQL als Benutzer her, der über rds_superuser-Berechtigungen verfügt. 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 PostGIS-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 PostGIS-Artefakte verwenden können. Dieser Schritt ist optional. Oder Sie können in Ihrer Benutzerdatenbank ein Schema für die PostGIS-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 wieder eine Verbindung mit Ihrer RDS-for-PostgreSQL-DB-Instance als gis_admin her.

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 der PostGIS-Erweiterungen.

Die PostGIS-Erweiterung enthält 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 PostGIS-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 in dem folgenden Beispiel gezeigte SQL-Abfrage ausführen, in der die Erweiterungen und ihre Besitzer aufgeführt 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: Übertragen Sie die Eigentümerschaft der Erweiterungen

Verwenden Sie die ALTER SCHEMA-Anweisungen, um die Eigentümerschaft der Schemata auf die Rolle gis_admin 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 die Eigentümeränderung 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 die Eigentümerschaft der PostGIS-Objekte.

Verwenden Sie die folgende Funktion, um die Eigentümerschaft der PostGIS-Objekte auf die Rolle gis_admin 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 unter Verwendung 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 PostGIS-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 unter CreateTopology (Topologie erstellen) in der PostgreSQL-Dokumentation.

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

Schritt 6: Upgrade der PostGIS-Erweiterung

Jede neue Version von PostgreSQL unterstützt eine oder mehrere Versionen der PostGIS-Erweiterung, die mit dieser Version kompatibel sind. Bei einem Upgrade der PostgreSQL-Engine auf eine neue Version wird die PostGIS-Erweiterung nicht automatisch aktualisiert. Vor dem Upgrade der PostgreSQL-Engine aktualisieren Sie PostGIS in der Regel auf die neueste verfügbare Version für die aktuelle PostgreSQL-Version. Details hierzu finden Sie unter PostGIS-Erweiterungsversionen.

Nach dem Upgrade der PostgreSQL-Engine aktualisieren Sie die PostGIS-Erweiterung erneut auf die Version, die für die neu aktualisierte PostgreSQL-Engine-Version unterstützt wird. Weitere Informationen zum Upgrade der PostgreSQL-Engine finden Sie unter Testen eines Upgrades Ihres Produktions-DB-Clusters auf eine neue Hauptversion. .

Sie können jederzeit prüfen, ob eine neue Version der PostGIS-Erweiterung auf dem Aurora-PostgreSQL-DB-Cluster verfügbar ist. Führen Sie dazu den folgenden Befehl aus. Diese Funktion ist mit PostGIS 2.5.0 und höheren Versionen verfügbar.

SELECT postGIS_extensions_upgrade();

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

CREATE EXTENSION postgis VERSION "2.5.5";

Wenn Sie von einer älteren Version auf eine bestimmte PostGIS-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 PostGIS 2 auf PostGIS 3 der Fall. Weitere Informationen finden Sie unter Upgrade von PostGIS 2 auf PostGIS 3.

Wenn Sie diese Erweiterung aktualisiert haben, um ein Upgrade der Hauptversion der PostgreSQL-Engine vorzubereiten, können Sie mit anderen vorbereitenden Aufgaben fortfahren. Weitere Informationen finden Sie unter Testen eines Upgrades Ihres Produktions-DB-Clusters auf eine neue Hauptversion.

PostGIS-Erweiterungsversionen

Wir empfehlen Ihnen, die Versionen aller Erweiterungen wie PostGIS zu installieren, wie sie unter Extension versions for Aurora PostgreSQL-Compatible Edition (Versionen aller Erweiterungen für Editionen, die mit Aurora PostgreSQL kompatibel sind) in Versionshinweise für Aurora PostgreSQL aufgelistet sind. . 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 in den Versionshinweisen zu Aurora PostgreSQL:

Upgrade von PostGIS 2 auf PostGIS 3

Ab Version 3.0 ist die PostGIS-Raster-Funktionalität jetzt eine separate Erweiterung, postgis_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 postgres_raster auf die neue Version durchzuführen.

So führen Sie ein Upgrade von PostGIS 2 auf PostGIS 3 durch
  1. Identifizieren Sie die Standardversion von PostGIS, die für die PostgreSQL-Version auf Ihrem Aurora-PostgreSQL-DB-Cluster verfügbar ist. 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 PostGIS, die in jeder Datenbank auf der Writer-Instance Ihres Aurora-PostgreSQL-DB-Clusters installiert sind. 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 Nichtübereinstimmung zwischen der Standardversion (PostGIS 3.1.4) und der installierten Version (PostGIS 2.3.7) bedeutet, dass Sie die PostGIS-Erweiterung aktualisieren müssen.

    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 PostGIS-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 PostGIS 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 PostGIS-2-Erweiterung auf PostGIS 3 aktualisiert wurde und beide postgis und die jetzt getrennte postgis_raster-Erweiterungen 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;