Erstellen von TLE-Erweiterungen für RDS für PostgreSQL - Amazon Relational Database Service

Erstellen von TLE-Erweiterungen für RDS für PostgreSQL

Sie können alle Erweiterungen, die Sie mit TLE erstellen, in in jeder beliebigen DB-Instance von RDS für PostgreSQL installieren, sofern die die pg_tle-Erweiterung darauf installiert ist. Die pg_tle-Erweiterung ist auf die PostgreSQL-Datenbank beschränkt, in der sie installiert ist. Die Erweiterungen, die Sie mit TLE erstellen, sind auf dieselbe Datenbank ausgelegt.

Verwenden Sie die verschiedenen pgtle-Funktionen, um den Code zu installieren, aus dem Ihre TLE-Erweiterung besteht. Die folgenden Funktionen von Trusted Language Extensions erfordern alle die pgtle_admin-Rolle.

Beispiel: Erstellen einer Trusted Language Extension mit SQL

Das folgende Beispiel zeigt Ihnen, wie Sie eine TLE-Erweiterung namens pg_distance erstellen, die einige SQL-Funktionen für die Berechnung von Entfernungen mit verschiedenen Formeln enthält. In der Liste finden Sie die Funktion zur Berechnung der Manhattan-Distanz und die Funktion zur Berechnung des euklidischen Abstands. Weitere Informationen zum Unterschied zwischen diesen Formeln finden Sie unter Taxi-Geometerie und Euklidische Geometrie in Wikipedia.

Sie können dieses Beispiel in Ihrer eigenen DB-Instance von RDS für PostgreSQL verwenden, wenn Sie die pg_tle-Erweiterung wie unter Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL beschrieben eingerichtet haben.

Anmerkung

Sie benötigen die Rechte der pgtle_admin-Rolle, um dieses Verfahren ausführen zu können.

So erstellen Sie die TLE-Beispielerweiterung

In den folgenden Schritten wird eine Beispieldatenbank namens labdb verwendet. Diese Datenbank gehört dem postgres-Hauptbenutzer. Die postgres-Rolle verfügt auch über die Berechtigungen der pgtle_admin-Rolle.

  1. Verwenden Sie psql, um eine Verbindung mit der herzustellen. DB-Instance von RDS für PostgreSQL

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Erstellen Sie eine TLE-Erweiterung mit dem Namen pg_distance, indem Sie den folgenden Code kopieren und in Ihre psql-Sitzungskonsole einfügen.

    SELECT pgtle.install_extension ( 'pg_distance', '0.1', 'Distance functions for two points', $_pg_tle_$ CREATE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL; CREATE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL; CREATE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL; $_pg_tle_$ );

    Die Ausgabe sollte folgendermaßen aussehen.

    install_extension --------------- t (1 row)

    Die Artefakte, aus denen die pg_distance-Erweiterung besteht, sind jetzt in Ihrer Datenbank installiert. Zu diesen Artefakten gehören die Steuerdatei und der Code für die Erweiterung. Diese Elemente müssen vorhanden sein, damit die Erweiterung mit dem CREATE EXTENSION-Befehl erstellt werden kann. Mit anderen Worten, Sie müssen die Erweiterung nach wie vor erstellen, um ihre Funktionen Datenbankbenutzern zur Verfügung zu stellen.

  3. Um die Erweiterung zu erstellen, verwenden Sie den CREATE EXTENSION-Befehl wie für jede andere Erweiterung. Wie bei anderen Erweiterungen muss der Datenbankbenutzer über die CREATE-Berechtigungen in der Datenbank verfügen.

    CREATE EXTENSION pg_distance;
  4. Um die pg_distance-TLE-Erweiterung zu testen, können Sie sie verwenden, um die Manhattan-Distanz zwischen vier Punkten zu berechnen.

    labdb=> SELECT manhattan_dist(1, 1, 5, 5); 8

    Um den euklidischen Abstand zwischen derselben Menge von Punkten zu berechnen, können Sie Folgendes verwenden.

    labdb=> SELECT euclidean_dist(1, 1, 5, 5); 5.656854249492381

Die pg_distance-Erweiterung lädt die Funktionen in die Datenbank und stellt sie allen Benutzern mit Berechtigungen für die Datenbank zur Verfügung.

Ändern Ihrer TLE-Erweiterung

Um die Abfrageleistung für die in dieser TLE-Erweiterung enthaltenen Funktionen zu verbessern, fügen Sie ihren Spezifikationen die beiden folgenden PostgreSQL-Attribute hinzu.

  • IMMUTABLE – Das IMMUTABLE-Attribut stellt sicher, dass der Abfrageoptimierer Optimierungen verwenden kann, um die Antwortzeiten von Abfragen zu verbessern. Weitere Informationen finden Sie im Abschnitt Volatilitätskategorien von Funktionen der PostgreSQL-Dokumentation.

  • PARALLEL SAFE – Das PARALLEL SAFE-Attribut ist ein weiteres Attribut, das es PostgreSQL ermöglicht, die Funktion im Parallelmodus auszuführen. Weitere Informationen finden Sie im Abschnitt CREATE FUNCTION der PostgreSQL-Dokumentation.

Im folgenden Beispiel können Sie sehen, wie die pgtle.install_update_path-Funktion verwendet wird, um diese Attribute jeder Funktion hinzuzufügen, um eine Version 0.2 der pg_distance-TLE-Erweiterung zu erstellen. Weitere Informationen zu dieser Funktion finden Sie unter pgtle.install_update_path. Sie benötigen die pgtle_admin Rolle, um diese Aufgabe auszuführen.

So aktualisieren Sie eine vorhandene TLE-Erweiterung und geben die Standardversion an
  1. Stellen Sie über psql oder ein anderes Client-Tool wie pgAdmin eine Verbindung mit der der DB-Instance von RDS für PostgreSQL her.

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Ändern Sie die vorhandene TLE-Erweiterung, indem Sie den folgenden Code kopieren und in Ihre psql-Sitzungskonsole einfügen.

    SELECT pgtle.install_update_path ( 'pg_distance', '0.1', '0.2', $_pg_tle_$ CREATE OR REPLACE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; $_pg_tle_$ );

    Es wird eine Antwort ähnlich dem folgenden Beispiel angezeigt.

    install_update_path --------------------- t (1 row)

    Sie können diese Version der Erweiterung zur Standardversion machen, sodass Datenbankbenutzer keine Version angeben müssen, wenn sie die Erweiterung in ihrer Datenbank erstellen oder aktualisieren.

  3. Um anzugeben, dass die modifizierte Version (Version 0.2) Ihrer TLE-Erweiterung die Standardversion ist, verwenden Sie die pgtle.set_default_version-Funktion wie im folgenden Beispiel gezeigt.

    SELECT pgtle.set_default_version('pg_distance', '0.2');

    Weitere Informationen zu dieser Funktion finden Sie unter pgtle.set_default_version.

  4. Wenn der Code vorhanden ist, können Sie die installierte TLE-Erweiterung wie gewohnt aktualisieren, indem Sie den ALTER EXTENSION ... UPDATE-Befehl verwenden, wie hier gezeigt:

    ALTER EXTENSION pg_distance UPDATE;