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.
Arbeiten mit Trusted Language Extensions für PostgreSQL
Trusted Language Extensions für PostgreSQL ist ein Open-Source-Entwicklungskit für die Erstellung von PostgreSQL-Erweiterungen. Es ermöglicht Ihnen, leistungsstarke PostgreSQL-Erweiterungen zu erstellen und diese sicher auf Ihrer PostgreSQL-DB-Instance auszuführen. Mithilfe von Trusted Language Extensions (TLE) für PostgreSQL können Sie PostgreSQL-Erweiterungen erstellen, die dem dokumentierten Ansatz zur Erweiterung der PostgreSQL-Funktionalität folgen. Weitere Informationen finden Sie unter Packaging Related Objects in a Extension
Ein wesentlicher Vorteil von TLE besteht darin, dass Sie es in Umgebungen verwenden können, die keinen Zugriff auf das der PostgreSQL-Instance zugrunde liegende Dateisystem bieten. Bisher war für die Installation einer neuen Erweiterung Zugriff auf das Dateisystem erforderlich. Mit TLE entfällt diese Einschränkung. Es bietet eine Entwicklungsumgebung für die Erstellung neuer Erweiterungen für jede PostgreSQL-Datenbank, einschließlich solcher, die auf Ihren DB-Instances von RDS für PostgreSQL ausgeführt werden.
TLE wurde entwickelt, um den Zugriff auf unsichere Ressourcen für die Erweiterungen zu verhindern, die Sie mit TLE erstellen. Die Laufzeitumgebung begrenzt die Auswirkungen eines Erweiterungsdefekts auf eine einzelne Datenbankverbindung. TLE verleiht Datenbankadministratoren auch eine detaillierte Kontrolle darüber, wer Erweiterungen installieren kann, und bietet ein Berechtigungsmodell für deren Ausführung.
TLE wird von den folgenden RDS-for-PostgreSQL-Versionen unterstützt:
-
Version 16.1 und höher 16 Versionen
-
Version 15.2 und höher 15 Versionen
-
Version 14.5 und höher 14 Versionen
-
Version 13.12 und höher 13 Versionen
Die Entwicklungsumgebung und Laufzeit von Trusted Language Extensions sind als pg_tle
-PostgreSQL-Erweiterung, Version 1.0.1, verpackt. Es unterstützt die Erstellung von Erweiterungen in Perl JavaScript, Tcl, PL/pgSQL und SQL. Sie installieren die pg_tle
-Erweiterung in Ihrer DB-Instance von RDS für PostgreSQL auf die gleiche Weise wie andere PostgreSQL-Erweiterungen. Nach der Einrichtung von pg_tle
können Entwickler damit neue PostgreSQL-Erweiterungen, sogenannte TLE-Erweiterungen, erstellen.
In den folgenden Themen finden Sie Informationen darüber, wie Sie Trusted Language Extensions einrichten und Ihre eigenen TLE-Erweiterungen erstellen.
Themen
- Terminologie
- Anforderungen für die Verwendung von Trusted Language Extensions für PostgreSQL
- Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL
- Übersicht über Trusted Language Extensions für PostgreSQL
- Erstellen von TLE-Erweiterungen für RDS für PostgreSQL
- Löschen Ihrer TLE-Erweiterungen aus einer Datenbank
- Deinstallieren von Trusted Language Extensions für PostgreSQL
- Verwenden von PostgreSQL-Haken mit Ihren TLE-Erweiterungen
- Verwendung benutzerdefinierter Datentypen in TLE
- Funktionsreferenz für Trusted Language Extensions für PostgreSQL
- Hakenreferenz für Trusted Language Extensions für PostgreSQL
Terminologie
Sehen Sie sich das folgende Glossar und die in diesem Thema verwendeten Begriffe an, damit Sie Trusted Language Extensions besser verstehen.
- Trusted Language Extensions für PostgreSQL
-
Trusted Language Extensions für PostgreSQL ist der offizielle Name des Open-Source-Entwicklungskits, das als
pg_tle
-Erweiterung verpackt ist. Es ist für die Verwendung in jedem PostgreSQL-System verfügbar. Weitere Informationen finden Sie unter aws/pg_tle on.GitHub - Trusted Language Extensions
-
Trusted Language Extensions ist der Kurzname für Trusted Language Extensions für PostgreSQL. Dieser verkürzte Name und seine Abkürzung (TLE) werden ebenfalls in dieser Dokumentation verwendet.
- Vertrauenswürdige Sprache
-
Eine vertrauenswürdige Sprache ist eine Programmier- oder Skriptsprache mit bestimmten Sicherheitsattributen. Beispielsweise schränken vertrauenswürdige Sprachen in der Regel den Zugriff auf das Dateisystem und die Verwendung bestimmter Netzwerkeigenschaften ein. Das TLE-Entwicklungskit wurde entwickelt, um vertrauenswürdige Sprachen zu unterstützen. PostgreSQL unterstützt verschiedene Sprachen, die verwendet werden, um vertrauenswürdige oder nicht vertrauenswürdige Erweiterungen zu erstellen. Ein Beispiel finden Sie unter Trusted and Untrusted PL/Perl
in der PostgreSQL-Dokumentation. Wenn Sie eine Erweiterung mithilfe von Trusted Language Extensions erstellen, verwendet die Erweiterung von sich aus vertrauenswürdige Sprachmechanismen. - TLE-Erweiterung
-
Eine TLE-Erweiterung ist eine PostgreSQL-Erweiterung, die mithilfe des Trusted Language Extensions (TLE)-Entwicklungskits erstellt wurde.
Anforderungen für die Verwendung von Trusted Language Extensions für PostgreSQL
Beachten Sie die folgenden Anforderungen für die Einrichtung und Verwendung des TLE-Entwicklungskits.
RDS-für-PostgreSQL-Versionen – Trusted Language Extensions wird nur von , RDS-für-PostgreSQL-Versionen 13.12 und höheren 13-Versionen, 14.5 und höheren 14-Versionen und 15.2 und höheren Versionen unterstützt.
Wenn Sie Ihren Ihre Instance von RDS für PostgreSQL aktualisieren müssen, finden Sie weitere Informationen unter Aktualisierung der SQL Postgre-DB-Engine für Amazon RDS.
Wenn Sie noch keine DB-Instance von Amazon RDS für die Ausführung von PostgreSQL haben, können Sie eine/n erstellen. Weitere Informationen finden Sie unter DB-Instance von RDS für PostgreSQL siehe Erstellen einer PostgreSQL-DB-Instance und Herstellen einer Verbindung.
Erfordert
rds_superuser
-Berechtigungen – Um diepg_tle
-Erweiterung einzurichten und zu konfigurieren, muss Ihre Datenbankbenutzerrolle über die Berechtigungen derrds_superuser
-Rolle verfügen. Diese Rolle wird standardmäßig dempostgres
-Benutzer zugewiesen, der den erstellt. DB-Instance von RDS für PostgreSQLErfordert eine benutzerdefinierte DB-Parametergruppe – Ihre DB-Instance von RDS für PostgreSQL muss mit einer benutzerdefinierten DB-Parametergruppe konfiguriert sein.
Wenn Ihre DB-Instance von RDS für PostgreSQL nicht mit einer benutzerdefinierten DB-Parametergruppe konfiguriert ist, sollten Sie eine erstellen und sie Ihrer DB-Instance von RDS für PostgreSQL zuordnen. Eine kurze Zusammenfassung der Schritte finden Sie unter Erstellen und Anwenden einer benutzerdefinierten DB-Parametergruppe.
Wenn Ihre DB-Instance von RDS für PostgreSQL bereits mit einer benutzerdefinierten DB-Parametergruppe konfiguriert ist, können Sie Trusted Language Extensions einrichten. Details hierzu finden Sie unter Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL.
Erstellen und Anwenden einer benutzerdefinierten DB-Parametergruppe
Verwenden Sie die folgenden Schritte, um eine benutzerdefinierte DB-Parametergruppe zu erstellen und Ihre DB-Instance von RDS für PostgreSQLInstance für ihre Verwendung zu konfigurieren.
So erstellen Sie eine benutzerdefinierte DB-Parametergruppe und verwenden Sie mit Ihrer DB-Instance von RDS für PostgreSQL
Melden Sie sich bei der Amazon RDS-Konsole an AWS Management Console und öffnen Sie sie unter https://console.aws.amazon.com/rds/
. Wählen Sie im Menü von Amazon RDS „Parameter groups“ (Parametergruppen) aus.
Wählen Sie Parametergruppe erstellen.
Geben Sie auf der Seite Parameter group details Parametergruppendetails die folgenden Informationen ein.
Wählen Sie unter Parameter group family (Parametergruppenfamilie) die Option postgres14 aus.
Wählen Sie für Type (Typ) die Option DB Parameter Group (DB-Parametergruppe) aus.
Geben Sie Ihrer Parametergruppe unter Group name (Gruppenname) im Kontext Ihrer Operationen einen aussagekräftigen Namen.
Geben Sie unter Description (Beschreibung) eine nützliche Beschreibung ein, damit andere Mitglieder Ihres Teams sie leicht finden können.
Wählen Sie Erstellen. Ihre benutzerdefinierte DB-Parametergruppe wird in Ihrer AWS-Region erstellt. Sie können jetzt Ihre DB-Instance von RDS für PostgreSQL ändern, um sie zu verwenden, indem Sie die nächsten Schritte ausführen.
Wählen Sie Databases (Datenbanken) im Amazon-RDS-Menü aus.
Wählen Sie aus der Liste die DB-Instance von RDS für PostgreSQL für die Verwendung mit TLE aus und klicken Sie dann auf Modify (Ändern).
Suchen Sie auf der Seite zum Suchen Sie auf der Seite zum Ändern der DB-Instance-Einstellungen im Abschnitt „Additional configuration“ (Zusätzliche Konfiguration) nach Database options (Datenbankoptionen) und wählen Sie Ihre benutzerdefinierte DB-Parametergruppe in der Auswahl aus.
Wählen Sie Continue (Weiter) aus, um die Änderung zu speichern.
Wählen Sie Apply immediately (Sofort anwenden) aus, damit Sie die Einrichtung der DB-Instance von RDS für PostgreSQL zur Verwendung von TLE fortsetzen können.
Informationen zum weiteren Einrichten Ihres Systems für Trusted Language Extensions finden Sie unter Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL.
Weitere Informationen zum Arbeiten mit DB-Parametergruppen siehe DB-Parametergruppen für Amazon RDS Amazon.
Sie können die Angabe des --region
-Arguments vermeiden, wenn Sie CLI-Befehle verwenden, indem Sie Ihre AWS CLI
mit Ihrer standardmäßigen AWS-Region konfigurieren. Weitere Informationen finden Sie unter Konfigurationsgrundlagen im AWS Command Line Interface -Benutzerhandbuch.
So erstellen Sie eine benutzerdefinierte DB-Parametergruppe und verwenden Sie mit Ihrer DB-Instance von RDS für PostgreSQLInstance
Verwenden Sie den create-db-parameter-group AWS CLI Befehl, um eine benutzerdefinierte DB-Parametergruppe auf der Grundlage von für Ihren zu erstellen. AWS-Region
UnixFür, oder: Linux macOS
aws rds create-db-parameter-group \ --region
aws-region
\ --db-parameter-group-namecustom-params-for-pg-tle
\ --db-parameter-group-family postgres14 \ --description "My custom DB parameter group for Trusted Language Extensions"Windows:
aws rds create-db-parameter-group ^ --region
aws-region
^ --db-parameter-group-namecustom-params-for-pg-tle
^ --db-parameter-group-family postgres14 ^ --description "My custom DB parameter group for Trusted Language Extensions"Ihre benutzerdefinierte DB-Parametergruppe ist in Ihrer AWS-Region verfügbar. Sie können also die DB-Instance von RDS für PostgreSQL ändern, um sie zu verwenden.
Verwenden Sie den modify-db-instance AWS CLI Befehl, um Ihre benutzerdefinierte DB-Parametergruppe auf anzuwenden. Ihre RDS für PostgreSQL-DB-Instance. Mit diesem Befehl wird die aktive Instanz sofort neu gestartet.
FürLinux, odermacOS: Unix
aws rds modify-db-instance \ --region
aws-region
\ --db-instance-identifieryour-instance-name
\ --db-parameter-group-namecustom-params-for-pg-tle
\ --apply-immediatelyWindows:
aws rds modify-db-instance ^ --region
aws-region
^ --db-instance-identifieryour-instance-name
^ --db-parameter-group-namecustom-params-for-pg-tle
^ --apply-immediately
Informationen zum weiteren Einrichten Ihres Systems für Trusted Language Extensions finden Sie unter Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL.
Weitere Informationen finden Sie unter Parametergruppen für Amazon RDS.
Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL
Bei den folgenden Schritten wird davon ausgegangen, dass Ihre DB-Instance von RDS für PostgreSQL einer benutzerdefinierten DB-Parametergruppe zugeordnet ist. Sie können das AWS Management Console oder das AWS CLI für diese Schritte verwenden.
Wenn Sie Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL einrichten, installieren Sie sie in einer bestimmten Datenbank, damit sie von den Datenbankbenutzern verwendet werden kann, die über Berechtigungen für diese Datenbank verfügen.
So richten Sie Trusted Language Extensions ein
Führen Sie die folgenden Schritte mit einem Konto aus, das Mitglied der rds_superuser
-Gruppe (Rolle) ist.
Melden Sie sich bei der Amazon RDS-Konsole an AWS Management Console und öffnen Sie sie unter https://console.aws.amazon.com/rds/
. -
Wählen Sie im Navigationsbereich Ihre DB-Instance von RDS für PostgreSQL aus.
-
Öffnen Sie die Registerkarte Configuration (Konfiguration) für Ihre DB-Instance von RDS für PostgreSQL Suchen Sie in den Instance-Details den Link Parameter group (Parametergruppe).
-
Wählen Sie den Link aus, um die benutzerdefinierten Parameter zu öffnen, die Ihrem DB-Instance von RDS für PostgreSQL
-
Geben Sie in das Suchfeld Parameters (Parameter)
shared_pre
ein, um denshared_preload_libraries
-Parameter zu finden. -
Wählen Sie Edit parameters (Parameter bearbeiten) aus, um auf die Eigenschaftswerte zuzugreifen.
-
Fügen Sie
pg_tle
der Liste im Feld Values (Werte) hinzu. Verwenden Sie ein Komma, um Elemente in der Werteliste zu trennen. Starten Sie die DB-Instance von RDS für PostgreSQL neu, damit Ihre Änderung des
shared_preload_libraries
-Parameters wirksam wird.Wenn die Instance verfügbar ist, überprüfen Sie, ob
pg_tle
initialisiert wurde. Stellen Sie überpsql
eine Verbindung mit der DB-Instance von RDS für PostgreSQL her und führen Sie den folgenden Befehl aus.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pg_tle (1 row)
Wenn die
pg_tle
-Erweiterung initialisiert ist, können Sie jetzt die Erweiterung erstellen.CREATE EXTENSION pg_tle;
Sie können überprüfen, ob die Erweiterung installiert wurde, indem Sie den folgenden
psql
-Metabefehl verwenden.labdb=>
\dx
List of installed extensions Name | Version | Schema | Description ---------+---------+------------+-------------------------------------------- pg_tle | 1.0.1 | pgtle | Trusted-Language Extensions for PostgreSQL plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
Weisen Sie der
pgtle_admin
-Rolle dem primären Benutzernamen zu, den Sie bei der Einrichtung für Ihre DB-Instance von RDS für PostgreSQL erstellt haben. Wenn Sie die Standardeinstellung akzeptiert haben, lautet der Wertpostgres
.labdb=>
GRANT pgtle_admin TO postgres;GRANT ROLE
Wie in folgendem Beispiel veranschaulicht, können Sie anhand des
psql
-Metabefehls überprüfen, ob die Gewährung erfolgt ist. In der Ausgabe werden nur die Rollenpgtle_admin
undpostgres
angezeigt. Weitere Informationen finden Sie unter Die Rolle „rds_superuser“ verstehen.labdb=>
\du
List of roles Role name | Attributes | Member of -----------------+---------------------------------+----------------------------------- pgtle_admin | Cannot login | {} postgres | Create role, Create DB +| {rds_superuser,pgtle_admin} | Password valid until infinity |...
Schließen Sie die
psql
-Sitzung mit dem\q
-Metabefehl.\q
Informationen zum Erstellen von TLE-Erweiterungen finden Sie unter Beispiel: Erstellen einer Trusted Language Extension mit SQL.
Sie können die Angabe des --region
-Arguments vermeiden, wenn Sie CLI-Befehle verwenden, indem Sie Ihre AWS CLI
mit Ihrer standardmäßigen AWS-Region konfigurieren. Weitere Informationen finden Sie unter Konfigurationsgrundlagen im AWS Command Line Interface Benutzerhandbuch.
So richten Sie Trusted Language Extensions ein
Verwenden Sie den modify-db-parameter-group AWS CLI Befehl,
pg_tle
um denshared_preload_libraries
Parameter zu erweitern.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pg_tle,ApplyMethod=pending-reboot" \ --regionaws-region
-
Verwenden Sie den reboot-db-instance AWS CLI Befehl, um die neu zu starten und die Bibliothek zu initialisieren.
pg_tle
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
Wenn die Instance verfügbar ist, können Sie überprüfen, ob
pg_tle
initialisiert wurde. Stellen Sie überpsql
eine Verbindung mit der DB-Instance von RDS für PostgreSQL her und führen Sie den folgenden Befehl aus.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pg_tle (1 row)
Sobald
pg_tle
initialisiert ist, können Sie die Erweiterung erstellen.CREATE EXTENSION pg_tle;
Weisen Sie der
pgtle_admin
-Rolle dem primären Benutzernamen zu, den Sie bei der Einrichtung für Ihre DB-Instance von RDS für PostgreSQL erstellt haben. Wenn Sie die Standardeinstellung akzeptiert haben, lautet der Wertpostgres
.GRANT pgtle_admin TO postgres;
GRANT ROLE
Schließen Sie die
psql
-Sitzung wie folgt.labdb=>
\q
Informationen zum Erstellen von TLE-Erweiterungen finden Sie unter Beispiel: Erstellen einer Trusted Language Extension mit SQL.
Übersicht über Trusted Language Extensions für PostgreSQL
Trusted Language Extensions für PostgreSQL ist eine PostgreSQL-Erweiterung, die Sie in Ihrer DB-Instance von RDS für PostgreSQL auf die gleiche Weise installieren, wie Sie andere PostgreSQL-Erweiterungen einrichten. In der folgenden Abbildung einer Beispieldatenbank im pgAdmin-Client-Tool können Sie einige der Komponenten sehen, aus denen die pg_tle
-Erweiterung besteht.
![Die Abbildung zeigt einige der Komponenten des TLE-Entwicklungskits.](images/apg-pg_tle-installed-view-in-pgAdmin.png)
Sie können die folgenden Details sehen.
-
Das Entwicklungskit von Trusted Language Extensions (TLE) für PostgreSQL ist als
pg_tle
-Erweiterung verpackt. Daher wirdpg_tle
den verfügbaren Erweiterungen für die Datenbank hinzugefügt, in der es installiert ist. TLE hat ein eigenes Schema,
pgtle
. Dieses Schema enthält Hilfsfunktionen (3) für die Installation und Verwaltung der von Ihnen erstellten Erweiterungen.TLE bietet über ein Dutzend Hilfsfunktionen für die Installation, Registrierung und Verwaltung Ihrer Erweiterungen. Weitere Informationen zu diesen Funktionen finden Sie unter Funktionsreferenz für Trusted Language Extensions für PostgreSQL.
Das pg_tle
-Erweiterungspaket umfasst außerdem folgende Komponenten:
Die
pgtle_admin
-Rolle – Diepgtle_admin
-Rolle wird erstellt, wenn diepg_tle
-Erweiterung installiert wird. Diese Rolle ist privilegiert und sollte entsprechend behandelt werden. Es wird dringend empfohlen, bei der Gewährung derpgtle_admin
-Rolle an Datenbankbenutzer dem Prinzip der geringsten Berechtigung zu folgen. Mit anderen Worten, weisen Sie diepgtle_admin
-Rolle nur Datenbankbenutzern zu, die berechtigt sind, neue TLE-Erweiterungen zu erstellen, zu installieren und zu verwalten, wie z. b.postgres
.Die
pgtle.feature_info
-Tabelle – Diepgtle.feature_info
-Tabelle ist eine geschützte Tabelle, die Informationen über Ihre TLEs, Haken und die von ihnen verwendeten benutzerdefinierten gespeicherten Prozeduren und Funktionen enthält. Wenn Sie überpgtle_admin
-Berechtigungen verfügen, verwenden Sie die folgenden Funktionen von Trusted Language Extensions, um diese Informationen in der Tabelle hinzuzufügen und zu aktualisieren.
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);
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
– 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
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Ä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;
Löschen Ihrer TLE-Erweiterungen aus einer Datenbank
Sie können Ihre TLE-Erweiterungen löschen, indem Sie den DROP EXTENSION
-Befehl auf die gleiche Weise wie für andere PostgreSQL-Erweiterungen verwenden. Durch das Löschen der Erweiterung werden die Installationsdateien, aus denen die Erweiterung besteht, nicht entfernt, sodass Benutzer die Erweiterung neu erstellen können. Gehen Sie wie folgt in zwei Schritten vor, um die Erweiterung und ihre Installationsdateien zu entfernen.
So löschen Sie die TLE-Erweiterung und entfernen ihre Installationsdateien
Stellen Sie über
psql
oder ein anderes Client-Tool eine Verbindung mit der DB-Instance von RDS für PostgreSQL her.psql --host=
.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=dbname
Löschen Sie die Erweiterung so wie jede andere PostgreSQL-Erweiterung.
DROP EXTENSION
your-TLE-extension
Wenn Sie die
pg_distance
-Erweiterung beispielsweise wie in beschrieben Beispiel: Erstellen einer Trusted Language Extension mit SQL erstellen, können Sie die Erweiterung wie folgt löschen.DROP EXTENSION pg_distance;
Es wird eine Ausgabe angezeigt, die bestätigt, dass die Erweiterung gelöscht wurde, wie im Folgenden gezeigt.
DROP EXTENSION
Zu diesem Zeitpunkt ist die Erweiterung in der Datenbank nicht mehr aktiv. Die Installationsdateien und die Steuerdatei sind jedoch nach wie vor in der Datenbank verfügbar, sodass Datenbankbenutzer die Erweiterung erneut erstellen können, wenn sie möchten.
Wenn Sie die Erweiterungsdateien intakt lassen möchten, damit Datenbankbenutzer Ihre TLE-Erweiterung erstellen können, können Sie an dieser Stelle aufhören.
Wenn Sie alle Dateien, aus denen die Erweiterung besteht, entfernen möchten, fahren Sie mit dem nächsten Schritt fort.
Verwenden Sie die
pgtle.uninstall_extension
-Funktion, um alle Installationsdateien für Ihre Erweiterung zu entfernen. Diese Funktion entfernt dne gesamten Code und die Steuerdateien für Ihre Erweiterung.SELECT pgtle.uninstall_extension('
your-tle-extension-name
');Verwenden Sie beispielsweise den folgenden Befehl, um alle
pg_distance
-Installationsdateien zu entfernen.SELECT pgtle.uninstall_extension('pg_distance');
uninstall_extension --------------------- t (1 row)
Deinstallieren von Trusted Language Extensions für PostgreSQL
Wenn Sie keine eigenen TLE-Erweiterungen mehr mit TLE erstellen möchten, können Sie die pg_tle
-Erweiterung löschen und alle Artefakte entfernen. Diese Aktion beinhaltet das Löschen aller TLE-Erweiterungen in der Datenbank und das Entfernen despgtle
-Schemas.
So löschen Sie die pg_tle
-Erweiterung und ihr Schema aus einer Datenbank
Stellen Sie über
psql
oder ein anderes Client-Tool eine Verbindung mit der DB-Instance von RDS für PostgreSQL her.psql --host=
.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=dbname
Löschen Sie die
pg_tle
-Erweiterung aus der Datenbank. Wenn Ihre eigenen TLE-Erweiterungen noch in der Datenbank laufen, müssen Sie diese Erweiterungen ebenfalls löschen. Dazu können Sie dasCASCADE
-Schlüsselwort verwenden, wie im Folgenden gezeigt.DROP EXTENSION pg_tle CASCADE;
Wenn die
pg_tle
-Erweiterung in der Datenbank nicht mehr aktiv ist, müssen Sie dasCASCADE
-Schlüsselwort nicht verwenden.Löschen Sie das
pgtle
-Schema. Mit dieser Aktion werden alle Verwaltungsfunktionen aus der Datenbank entfernt.DROP SCHEMA pgtle CASCADE;
Der Befehl gibt nach Abschluss des Vorgangs Folgendes zurück.
DROP SCHEMA
Die
pg_tle
-Erweiterung, ihr Schema und ihre Funktionen sowie alle Artefakte werden entfernt. Um neue Erweiterungen mit TLE zu erstellen, führen Sie den Einrichtungsvorgang erneut durch. Weitere Informationen finden Sie unter Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL.
Verwenden von PostgreSQL-Haken mit Ihren TLE-Erweiterungen
Ein Haken ist ein in PostgreSQL verfügbarer Callback-Mechanismus, der es Entwicklern ermöglicht, benutzerdefinierte Funktionen oder andere Routinen während regulärer Datenbankoperationen aufzurufen. Das TLE-Entwicklungskit unterstützt PostgreSQL-Haken, sodass Sie benutzerdefinierte Funktionen zur Laufzeit in das PostgreSQL-Verhalten integrieren können. Sie können beispielsweise einen Haken verwenden, um den Authentifizierungsprozess mit Ihrem eigenen benutzerdefinierten Code zu verknüpfen oder um den Planungs- und Ausführungsprozess für Abfragen Ihren spezifischen Bedürfnissen entsprechend anzupassen.
Ihre TLE-Erweiterungen können Haken verwenden. Wenn ein Haken einen globalen Gültigkeitsbereich hat, gilt er für alle Datenbanken. Wenn Ihre TLE-Erweiterung einen globalen Haken verwendet, müssen Sie Ihre TLE-Erweiterung daher in allen Datenbanken erstellen, auf die Ihre Benutzer zugreifen können.
Wenn Sie die pg_tle
-Erweiterung verwenden, um Ihre eigenen Trusted Language Extensions zu erstellen, können Sie die verfügbaren Haken einer SQL-API verwenden, um die Funktionen Ihrer Erweiterung zu erstellen. Sie sollten alle Haken bei pg_tle
registrieren. Für einige Haken müssen Sie möglicherweise auch verschiedene Konfigurationsparameter festlegen. Der passcode
-Prüfungshaken kann beispielsweise auf ein, aus oder erforderlich festgelegt werden. Weitere Hinweise zu den spezifischen Anforderungen für verfügbare pg_tle
-Haken finden Sie unter Hakenreferenz für Trusted Language Extensions für PostgreSQL.
Beispiel: Erstellen einer Erweiterung, die einen PostgreSQL-Haken verwendet
Das in diesem Abschnitt besprochene Beispiel verwendet einen PostgreSQL-Haken, um das bei bestimmten SQL-Vorgängen angegebene Passwort zu überprüfen, und verhindert, dass Datenbankbenutzer ihre Passwörter auf eines der in der password_check.bad_passwords
-Tabelle enthaltenen Passwörter festlegen. Die Tabelle enthält die zehn am häufigsten verwendeten, aber leicht zu knackenden Optionen für Passwörter.
Um dieses Beispiel in Ihrer DB-Instance von RDS für PostgreSQL einzurichten, müssen Sie Trusted Language Extensions bereits installiert haben. Details hierzu finden Sie unter Einrichten von Trusted Language Extensions in Ihrer DB-Instance von RDS für PostgreSQL.
So richten Sie das Beispiel für einen Haken für die Passwortüberprüfung ein
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=labdb
Kopieren Sie den Code von Liste der Hakencodes für die Passwortüberprüfung und fügen Sie ihn in Ihre Datenbank ein.
SELECT pgtle.install_extension ( 'my_password_check_rules', '1.0', 'Do not let users use the 10 most commonly used passwords', $_pgtle_$ CREATE SCHEMA password_check; REVOKE ALL ON SCHEMA password_check FROM PUBLIC; GRANT USAGE ON SCHEMA password_check TO PUBLIC; CREATE TABLE password_check.bad_passwords (plaintext) AS VALUES ('123456'), ('password'), ('12345678'), ('qwerty'), ('123456789'), ('12345'), ('1234'), ('111111'), ('1234567'), ('dragon'); CREATE UNIQUE INDEX ON password_check.bad_passwords (plaintext); CREATE FUNCTION password_check.passcheck_hook(username text, password text, password_type pgtle.password_types, valid_until timestamptz, valid_null boolean) RETURNS void AS $$ DECLARE invalid bool := false; BEGIN IF password_type = 'PASSWORD_TYPE_MD5' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE ('md5' || md5(bp.plaintext || username)) = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common password dictionary'; END IF; ELSIF password_type = 'PASSWORD_TYPE_PLAINTEXT' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE bp.plaintext = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common common password dictionary'; END IF; END IF; END $$ LANGUAGE plpgsql SECURITY DEFINER; GRANT EXECUTE ON FUNCTION password_check.passcheck_hook TO PUBLIC; SELECT pgtle.register_feature('password_check.passcheck_hook', 'passcheck'); $_pgtle_$ );
Wenn die Erweiterung in Ihre Datenbank geladen wurde, sehen Sie eine Ausgabe ähnlich wie die folgende.
install_extension ------------------- t (1 row)
Während Sie noch mit der Datenbank verbunden sind, können Sie jetzt die Erweiterung erstellen.
CREATE EXTENSION my_password_check_rules;
Mit dem folgenden
psql
-Metabefehl können Sie bestätigen, dass die Erweiterung in der Datenbank erstellt wurde.\dx
List of installed extensions Name | Version | Schema | Description -------------------------+---------+------------+------------------------------------------------------------- my_password_check_rules | 1.0 | public | Prevent use of any of the top-ten most common bad passwords pg_tle | 1.0.1 | pgtle | Trusted-Language Extensions for PostgreSQL plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (3 rows)
Öffnen Sie eine weitere Terminalsitzung, um mit dem zu arbeiten. AWS CLI Sie müssen Ihre benutzerdefinierte DB-Parametergruppe ändern, um den Haken für die Passwortüberprüfung zu aktivieren. Verwenden Sie dazu den modify-db-parameter-groupCLI-Befehl, wie im folgenden Beispiel gezeigt.
aws rds modify-db-parameter-group \ --region
aws-region
\ --db-parameter-group-nameyour-custom-parameter-group
\ --parameters "ParameterName=pgtle.enable_password_check,ParameterValue=on,ApplyMethod=immediate"Wenn der Parameter erfolgreich aktiviert wurde, wird eine Ausgabe wie die folgende angezeigt.
( "DBParameterGroupName": "docs-lab-parameters-for-tle" }
Es kann einige Minuten dauern, bis die Änderung der Parametergruppe wirksam wird. Dieser Parameter ist jedoch dynamisch, sodass Sie die DB-Instance von RDS für PostgreSQL nicht neu starten müssen, damit die Einstellung wirksam wird.
Öffnen Sie die
psql
-Sitzung und fragen Sie die Datenbank ab, um zu überprüfen, ob der password_check-Haken aktiviert wurde.labdb=>
SHOW pgtle.enable_password_check;pgtle.enable_password_check ----------------------------- on (1 row)
Der Haken für die Passwortüberprüfung ist jetzt aktiv. Sie können dies testen, indem Sie eine neue Rolle erstellen und eines der schwachen Passwörter verwenden, wie im folgenden Beispiel gezeigt.
CREATE ROLE test_role PASSWORD 'password';
ERROR: Cannot use passwords from the common password dictionary
CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 21 at RAISE
SQL statement "SELECT password_check.passcheck_hook(
$1::pg_catalog.text,
$2::pg_catalog.text,
$3::pgtle.password_types,
$4::pg_catalog.timestamptz,
$5::pg_catalog.bool)"
Die Ausgabe wurde zur besseren Lesbarkeit formatiert.
Das folgende Beispiel zeigt, dass das interaktive pgsql
-Metabefehlverhalten \password
auch vom password_check-Haken beeinflusst wird.
postgres=>
SET password_encryption TO 'md5';SET
postgres=>
\passwordEnter new password for user "postgres":
*****
Enter it again:
*****
ERROR: Cannot use passwords from the common password dictionary CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 12 at RAISE SQL statement "SELECT password_check.passcheck_hook($1::pg_catalog.text, $2::pg_catalog.text, $3::pgtle.password_types, $4::pg_catalog.timestamptz, $5::pg_catalog.bool)"
Sie können diese TLE-Erweiterung löschen und ihre Quelldateien deinstallieren, wenn Sie möchten. Weitere Informationen finden Sie unter Löschen Ihrer TLE-Erweiterungen aus einer Datenbank.
Liste der Hakencodes für die Passwortüberprüfung
Der hier gezeigte Beispielcode definiert die Spezifikation für die my_password_check_rules
-TLE-Erweiterung. Wenn Sie diesen Code kopieren und in Ihre Datenbank einfügen, wird der Code für die my_password_check_rules
-Erweiterung in die Datenbank geladen und der password_check
-Haken für die Verwendung durch die Erweiterung registriert.
SELECT pgtle.install_extension ( 'my_password_check_rules', '1.0', 'Do not let users use the 10 most commonly used passwords', $_pgtle_$ CREATE SCHEMA password_check; REVOKE ALL ON SCHEMA password_check FROM PUBLIC; GRANT USAGE ON SCHEMA password_check TO PUBLIC; CREATE TABLE password_check.bad_passwords (plaintext) AS VALUES ('123456'), ('password'), ('12345678'), ('qwerty'), ('123456789'), ('12345'), ('1234'), ('111111'), ('1234567'), ('dragon'); CREATE UNIQUE INDEX ON password_check.bad_passwords (plaintext); CREATE FUNCTION password_check.passcheck_hook(username text, password text, password_type pgtle.password_types, valid_until timestamptz, valid_null boolean) RETURNS void AS $$ DECLARE invalid bool := false; BEGIN IF password_type = 'PASSWORD_TYPE_MD5' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE ('md5' || md5(bp.plaintext || username)) = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common password dictionary'; END IF; ELSIF password_type = 'PASSWORD_TYPE_PLAINTEXT' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE bp.plaintext = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common common password dictionary'; END IF; END IF; END $$ LANGUAGE plpgsql SECURITY DEFINER; GRANT EXECUTE ON FUNCTION password_check.passcheck_hook TO PUBLIC; SELECT pgtle.register_feature('password_check.passcheck_hook', 'passcheck'); $_pgtle_$ );
Verwendung benutzerdefinierter Datentypen in TLE
PostgreSQL unterstützt Befehle zur Registrierung neuer Basistypen (auch bekannt als Skalartypen), um komplexe Datenstrukturen in Ihrer Datenbank effizient zu handhaben. Mit einem Basistyp können Sie anpassen, wie die Daten intern gespeichert werden und wie sie in und aus einer externen Textdarstellung konvertiert werden. Diese benutzerdefinierten Datentypen sind nützlich, wenn PostgreSQL erweitert wird, um funktionale Domains zu unterstützen, in denen ein integrierter Typ wie Zahl oder Text keine ausreichende Suchsemantik bieten kann.
Mit RDS für PostgreSQL können Sie benutzerdefinierte Datentypen in Ihrer Trusted Languages Extension erstellen und Funktionen definieren, die SQL- und Indexoperationen für diese neuen Datentypen unterstützen. Benutzerdefinierte Datentypen sind für die folgenden Versionen verfügbar:
-
RDS für PostgreSQL 15.4 und höhere 15-Versionen
-
RDS für PostgreSQL 14.9 und höhere 14-Versionen
-
RDS für PostgreSQL 13.12 und höhere 13-Versionen
Weitere Informationen finden Sie unter Trusted Language Base-Typen