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
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.
Verwenden Sie
psql, um eine Verbindung mit der herzustellen. DB-Instance von RDS für PostgreSQLpsql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432--username=postgres--password --dbname=labdbErstellen Sie eine TLE-Erweiterung mit dem Namen
pg_distance, indem Sie den folgenden Code kopieren und in Ihrepsql-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 demCREATE 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.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 dieCREATE-Berechtigungen in der Datenbank verfügen.CREATE EXTENSION pg_distance;Um die
pg_distance-TLE-Erweiterung zu testen, können Sie sie verwenden, um die Manhattan-Distanzzwischen vier Punkten zu berechnen. labdb=>SELECT manhattan_dist(1, 1, 5, 5);8Um 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– DasIMMUTABLE-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 Funktionender PostgreSQL-Dokumentation. PARALLEL SAFE– DasPARALLEL SAFE-Attribut ist ein weiteres Attribut, das es PostgreSQL ermöglicht, die Funktion im Parallelmodus auszuführen. Weitere Informationen finden Sie im Abschnitt CREATE FUNCTIONder 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
Stellen Sie über
psqloder 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Ä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.
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.
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;