Überlegungen zur Verwendung von Erweiterungen und Modulen in Azure Database for PostgreSQL – Flexibler Server

In diesem Artikel werden besondere Überlegungen zur Verwendung bestimmter Erweiterungen oder Module in Azure Database for PostgreSQL flexiblen Server beschrieben.

Allgemeine Überlegungen für Erweiterungen

Um eine Erweiterung auf einem Azure Database for PostgreSQL Flexible Server zu verwenden, müssen Sie:

  • Erweiterung zulassen. Wenn Sie die Erweiterung nicht zulassen, schlägt jeder Versuch, CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION oder COMMENT ON EXTENSION auszuführen, mit einem Fehler fehl, der angibt, dass die referenzierte Erweiterung nicht erlaubt ist.
  • Wenn die Erweiterung eine freigegebene Binärbibliothek bereitstellt, die das Zuweisen und Zugreifen auf gemeinsam genutzten Arbeitsspeicher erfordert und beim Starten des Servers geladen werden muss, befolgen Sie die Anweisungen in Ladebibliotheken.
  • Erstellen Sie die Erweiterung in den Datenbanken, in denen die Erweiterung die MIT dieser Erweiterung verteilten SQL-Objekte bereitstellen soll.
  • Drop-Erweiterung. Wenn Sie alle SQL-Objekte aus der Datenbank entfernen möchten, die durch diese Erweiterung bereitgestellt werden.
  • Aktualisieren Sie Erweiterungen, um auf die neueste Version aller SQL-Artefakte zu aktualisieren, die von einer Erweiterung bereitgestellt werden, die bereits installiert ist.
  • Zeigen Sie die installierten Erweiterungen und deren entsprechende Versionen an.

Wenn beim Ausführen der Befehle CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION oder COMMENT ON EXTENSION auf Ihrem flexiblen Azure Database for PostgreSQL-Server Fehler auftreten, finden Sie in der Liste der möglichen Fehler die möglichen Ursachen für die einzelnen Fehler.

Allgemeine Überlegungen für Module

Um ein Modul in Azure Database for PostgreSQL flexiblen Server zu verwenden, fügen Sie es dem shared_preload_libraries Parameter hinzu, wie in Ladebibliotheken beschrieben.

Module müssen nicht auf die Positivliste gesetzt werden. Dies ist eine exklusive Anforderung für Erweiterungen.

Erweiterungen mit bestimmten Überlegungen

In der folgenden Liste werden alle unterstützten Erweiterungen aufgelistet, die bei verwendung in Azure Database for PostgreSQL flexiblen Server bestimmte Überlegungen erfordern:

  • AGE
  • dblink
  • pg_buffercache
  • pg_cron
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • pgcrypto
  • postgres_fdw
  • pgstattuple

AGE

Die Apache AGE-Erweiterung ist eine Graph-Erweiterung für PostgreSQL, die von Azure Database for PostgreSQL unterstützt wird. Es bietet Graph-Datenbankfunktionen, offene Cypher-Abfrageunterstützung und die Möglichkeit, komplexe Abfragen zu graphischen Daten auszuführen, die in PostgreSQL gespeichert sind. "Apache AGE" ist ein Open-Source-Projekt, das unter der Apache License 2.0 veröffentlicht wurde.

AGE installieren

Um AGE zu verwenden, müssen Sie sicherstellen, dass Sie die Erweiterung auf die Positivliste gesetzt haben, dass ihre Bibliothek geladen wird und dass die Erweiterung in der Datenbank installiert ist, in der Sie ihre Funktionalität verwenden möchten.

Mit der dblink Erweiterung können Sie eine Verbindung von einem Azure Database for PostgreSQL flexiblen Server mit einer anderen oder einer anderen Datenbank auf demselben Server herstellen. Azure Database for PostgreSQL unterstützt sowohl eingehende als auch ausgehende Verbindungen mit jedem PostgreSQL-Server. Der sendende Server muss ausgehende Verbindungen vom empfangenden Server zulassen. Ebenso muss der empfangende Server Verbindungen vom sendenden Server zulassen.

Wenn Sie diese Erweiterung verwenden möchten, stellen Sie Ihre Server mit der Integration des virtuellen Netzwerks bereit. Standardmäßig lässt die Virtual Network-Integration Verbindungen zwischen Servern im virtuellen Netzwerk zu. Sie können auch Virtual Network-Sicherheitsgruppen verwenden, um den Zugriff anzupassen.

pg_buffercache

Verwenden Sie die pg_buffercache Erweiterung, um den Inhalt von shared_buffers zu untersuchen. Mit dieser Erweiterung können Sie feststellen, ob eine bestimmte Relation in shared_buffers zwischengespeichert ist. Diese Erweiterung kann Ihnen bei der Behandlung von Leistungsproblemen im Zusammenhang mit der Zwischenspeicherung helfen.

Diese Erweiterung ist Teil der Kerninstallation von PostgreSQL, und es ist einfach zu installieren.

CREATE EXTENSION pg_buffercache;

pg_cron

Die pg_cron-Erweiterung ist ein einfacher, cron-basierter Auftragsplaner für PostgreSQL, der in der Datenbank als Erweiterung ausgeführt wird. Mithilfe der pg_cron-Erweiterung können geplante Wartungstasks in einer PostgreSQL-Datenbank ausgeführt werden. Beispielsweise können Sie eine Tabelle regelmäßig mit „vacuum“ bereinigen oder alte Datenaufträge entfernen.

Die pg_cron-Erweiterung kann mehrere Aufträge parallel ausführen, aber jeweils höchstens eine Instanz eines Auftrags. Wenn eine zweite Ausführung gestartet werden soll, bevor die erste Ausführung abgeschlossen wurde, wird die zweite Ausführung in die Warteschlange eingereiht und nach Abschluss der ersten Ausführung gestartet. Auf diese Weise wird sichergestellt, dass Aufträge genau so oft wie geplant und nicht gleichzeitig ausgeführt werden.

Stellen Sie sicher, dass der Wert, auf den shared_preload_libraries festgelegt ist, pg_cron enthält. Diese Erweiterung unterstützt das Laden der Bibliothek nicht als Auswirkung der Ausführung von CREATE EXTENSION. Jeder Versuch, CREATE EXTENSION auszuführen, wenn die Erweiterung nicht zu shared_preload_libraries hinzugefügt oder der Server nach dem Hinzufügen nicht neu gestartet wurde, führt zu einem Fehler, dessen Fehlermeldung pg_cron can only be loaded via shared_preload_libraries und dessen Hinweis Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf lautet.

Um pg_cron zu verwenden, müssen Sie sicherstellen, dass Sie die Bibliothek beim Serverstart laden, dass die Erweiterung auf die Positivliste gesetzt wurde und dass sie in jeder Datenbank installiert ist, in der Sie mithilfe der von der Erweiterung erstellten SQL-Artefakte mit der Erweiterungsfunktionalität interagieren möchten.

Examples

  1. Um alte Daten am Samstag um 3:30 Uhr (GMT) zu löschen.

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. Um das Vakuum täglich um 10:00 Uhr (GMT) in der Standarddatenbank postgres auszuführen.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. So heben Sie den Zeitplan für alle Tasks aus pg_cron auf

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Anzeigen aller derzeit mit pg_cron geplanten Aufträge

    SELECT * FROM cron.job;
    
  5. Um das Vakuum täglich um 10:00 Uhr (GMT) in der Datenbank test cron unter dem azure_pg_admin-Rollenkonto auszuführen.

    SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
    

Weitere Beispiele

Ab pg_cron-Version 1.4 können Sie die Funktionen cron.schedule_in_database und cron.alter_job verwenden, um Ihren Auftrag in einer bestimmten Datenbank zu planen und einen vorhandenen Zeitplan zu aktualisieren.

Die cron_schedule_in_database-Funktion ermöglicht den Benutzernamen als optionalen Parameter. Das Festlegen des Benutzernamens auf einen Wert ungleich NULL erfordert PostgreSQL-Superuserberechtigungen und wird in Azure Database for PostgreSQL Flexible Server nicht unterstützt. Die obigen Beispiele zeigen die Ausführung dieser Funktion mit einem optionalen Benutzernamenparameter, der nicht angegeben oder auf Null festgelegt ist, wodurch der Auftrag im Kontext der Benutzerplanung des Auftrags ausgeführt wird, der azure_pg_admin-Rollenberechtigungen aufweisen sollte.

  1. So löschen Sie alte Daten am Samstag um 3:30 Uhr (GMT) in der Datenbank „DBName“.

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. So aktualisieren oder ändern Sie den Datenbanknamen für den vorhandenen Zeitplan

    SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
    

pg_hint_plan

Mit der pg_hint_plan Erweiterung können Sie die Ausführungspläne von PostgreSQL mithilfe von "Hinweisen" in SQL-Kommentaren optimieren, z. B.:

/*+ SeqScan(a) */

Die pg_hint_plan-Erweiterung liest Hinweisausdrücke in einem Kommentar in der mit der SQL-Ziel-Anweisung angegebenen speziellen Form. Das jeweilige Formular beginnt mit der Zeichenfolge /*+ und endet mit */. Hinweisausdrücke bestehen aus den Hinweisnamen und den folgenden Parametern, die in Klammern eingeschlossen und durch Leerzeichen getrennt sind. Neue Zeilen zur besseren Lesbarkeit können die einzelnen Hinweisausdrücke trennen.

Example:

/*+
 HashJoin(a b)
 SeqScan(a)
 */
    SELECT *
    FROM pgbench_branches b
    JOIN pgbench_accounts an ON b.bid = a.bid
    ORDER BY a.aid;

Im vorangehenden Beispiel veranlasst dies den Planer, die Ergebnisse eines seqscan für die Tabelle a zu verwenden, um sie als b mit der Tabelle hashjoin zu kombinieren.

Um die pg_hint_plan Erweiterung zu verwenden, stellen Sie sicher, dass Sie die Erweiterung zulassen , ihre Bibliothek laden und die Erweiterung in der Datenbank installieren, in der Sie die Funktionalität verwenden möchten.

pg_prewarm

Die pg_prewarm-Erweiterung lädt relationale Daten in den Zwischenspeicher. Wenn Sie Ihre Caches vorwärmen, erzielen Ihre Abfragen beim ersten Ausführen nach einem Neustart kürzere Antwortzeiten. Die AutoPrewarm-Funktionalität für PostgreSQL ist derzeit nicht in Azure-Datenbank verfügbar.

pg_repack

Benutzer, die die pg_repack-Erweiterung zum ersten Mal verwenden, stellen typischerweise die folgende Frage: Ist pg_repack eine Erweiterung oder eine clientseitig ausführbare Datei wie psql oder pg_dump?

pg_repack ist eigentlich beides. pg_repack/lib verfügt über den Code für die Erweiterung, einschließlich des von ihr erstellten Schemas und SQL-Artefakte, und die C-Bibliothek, die den Code mehrerer dieser Funktionen implementiert.

Auf der anderen Seite verfügt pg_repack/bin über den Code für die Clientanwendung, der weiß, wie mit den in der Erweiterung implementierten Programmierbarkeitselementen interagiert wird. Diese Clientanwendung zielt darauf ab, die Komplexität der Interaktion mit den verschiedenen Schnittstellen zu erleichtern, die von der serverseitigen Erweiterung angezeigt werden. Er bietet dem Benutzer einige Befehlszeilenoptionen, die einfacher zu verstehen sind. Die Clientanwendung ist nutzlos, ohne dass die Erweiterung in der Datenbank erstellt wurde, auf die sie verweist. Die serverseitige Erweiterung selbst ist voll funktionsfähig, erfordert jedoch, dass der Benutzer ein kompliziertes Interaktionsmuster versteht. Dieses Muster besteht aus der Ausführung von Abfragen zum Abrufen von Daten, die als Eingabe für funktionen verwendet werden, die von der Erweiterung implementiert werden usw.

Berechtigung verweigert für Repack-Schema

Derzeit können Sie, da die Erweiterung Berechtigungen für das Repack-Schema gewährt, die Ausführung der pg_repack-Funktionalität nur im Kontext von azure_pg_admin unterstützen.

Möglicherweise stellen Sie fest, dass der Besitzer einer Tabelle, der nicht azure_pg_admin ist, beim Versuch, pg_repack auszuführen, die folgende Fehlermeldung erhält:

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

Um diesen Fehler zu vermeiden, führen Sie pg_repack im Kontext von azure_pg_admin aus.

pg_stat_statements

Mit der pg_stat_statements-Erweiterung erhalten Sie eine Ansicht aller Abfragen, die in Ihrer Datenbank ausgeführt werden. Diese Information ist nützlich, um die Leistung ihrer Abfragearbeitsauslastung in einem Produktionssystem zu verstehen.

Die pg_stat_statements Erweiterung wird auf jedem Azure Database for PostgreSQL flexiblen Server vorinstalliertshared_preload_libraries, um eine Nachverfolgung von SQL-Anweisungsausführungsstatistiken bereitzustellen.

Aus Sicherheitsgründen müssen Sie die pg_stat_statements Erweiterungzulassen und mit dem Befehl CREATE EXTENSION installieren.

Die Einstellung pg_stat_statements.track, die steuert, welche Anweisungen die Erweiterung nachverfolgt, ist standardmäßig auf top festgelegt, was bedeutet, dass alle Anweisungen, die direkt von Clients ausgegeben werden, nachverfolgt werden. Die beiden anderen Nachverfolgungsebenen sind none und all. Sie können diese Einstellung als Parameter konfigurieren.

Es gibt einen Kompromiss zwischen den Abfrageausführungsinformationen, die die pg_stat_statements Erweiterung bereitstellt, und der Serverleistung, da sie jede SQL-Anweisung protokolliert. Wenn Sie die pg_stat_statements Erweiterung nicht aktiv verwenden, legen Sie diesen pg_stat_statements.track Wert auf none. Einige Überwachungsdienste von Drittanbietern können sich auf pg_stat_statements beziehen, um Statistiken zur Abfrageleistung zu liefern. Bestätigen Sie daher, ob dieser Fall auf Sie zutrifft.

pgcrypto

Azure Database for PostgreSQL unterstützt die Verschlüsselung auf Spaltenebene über die pgcrypto PostgreSQL-Erweiterung auf Anwendungsebene. Mit der pgcrypto-Erweiterung können Anwendungen kryptografische Funktionen in PostgreSQL SQL-Anweisungen explizit aufrufen, um Spaltenwerte zu verschlüsseln oder zu hashen, indem kryptografische Algorithmen verwendet werden, die von der zugrunde liegenden OpenSSL-Bibliothek bereitgestellt werden.

Ab Azure Linux 3.0 verwendet das Betriebssystem OpenSSL 3.0, wodurch mehrere ältere und schwächere kryptografische Algorithmen und APIs auf niedriger Ebene in einen separaten Legacyanbieter verschoben werden, der standardmäßig nicht geladen wird. Diese Änderung fördert die Verwendung moderner, sichererer kryptografischer Algorithmen und der allgemeinen OpenSSL EVP (Envelope)-APIs.

Daher sind kryptografische Algorithmen, die OpenSSL 3.0 als Legacy klassifiziert, standardmäßig nicht für die Verwendung durch pgcrypto auf Azure Database for PostgreSQL Servern verfügbar, auf denen Azure Linux 3.0 ausgeführt wird.

Veraltete kryptografische Algorithmen

Die folgenden älteren Kryptografiealgorithmen befinden sich im älteren OpenSSL 3.0-Anbieter und sind auf Azure Database for PostgreSQL Servern, die Azure Linux 3.0 ausgeführt werden, standardmäßig nicht verfügbar. Frühere Plattformversionen haben pgcrypto möglicherweise erlaubt, diese Algorithmen zu verwenden, aber Azure Linux 3.0 unterstützt sie nicht mehr.

Symmetrische Verschlüsselungsalgorithmen (Chiffre)

  • Blowfish (BF-CBC)
  • CAST
  • DES (einfaches DES; nicht 3DES)
  • IDEE
  • RC2
  • RC4
  • RC5
  • SEED

Nachrichtendigest und Hashalgorithmen

  • MD2
  • MD4
  • MDC2
  • RIPEMD-160
  • SHA-1 (ist für digitale Signaturen veraltet, kann aber je nach Konfiguration für bestimmte HMAC-Szenarien dennoch zulässig sein)
  • Whirlpool

Azure Database for PostgreSQL Upgrades auf Azure Linux 3.0 sind Teil der fortlaufenden Verbesserungen der Plattform. Anwendungen, die auf pgcrypto basieren, sollten sicherstellen, dass sie moderne, unterstützte Kryptografiealgorithmen verwenden, wenn Sie verschlüsselung auf Anwendungsebene und Spaltenebene durchführen.

postgres_fdw

Mit der postgres_fdw Erweiterung können Sie eine Verbindung von einem Azure Database for PostgreSQL flexiblen Server mit einem anderen Server oder mit einer anderen Datenbank auf demselben Server herstellen. Azure Database for PostgreSQL unterstützt sowohl eingehende als auch ausgehende Verbindungen mit jedem PostgreSQL-Server. Der sendende Server muss ausgehende Verbindungen vom empfangenden Server zulassen. Ebenso muss der empfangende Server Verbindungen vom sendenden Server zulassen.

Wenn Sie diese Erweiterung verwenden möchten, stellen Sie Ihre Server mit der Integration des virtuellen Netzwerks bereit. Standardmäßig lässt die Virtual Network-Integration Verbindungen zwischen Servern im virtuellen Netzwerk zu. Sie können auch Virtual Network-Sicherheitsgruppen verwenden, um den Zugriff anzupassen.

pgstattuple

Wenn Sie mit der Erweiterung pgstattuple versuchen, Tupelstatistiken von Objekten abzurufen, die im Schema pg_toast gespeichert sind, erhalten Sie in Postgres-Versionen 11 bis 13 den Fehler „Zugriff auf Schema „pg_toast“ verweigert“.

Berechtigung verweigert für pg_toast-Schema

Kunden, die die PostgreSQL-Versionen 11 bis 13 auf Azure Database for PostgreSQL flexiblen Server verwenden, können die pgstattuple Erweiterung nicht für Objekte innerhalb des pg_toast Schemas verwenden.

In PostgreSQL 16 und 17 wird die Rolle pg_read_all_data automatisch an azure_pg_admin vergeben, wodurch pgstattuple korrekt funktionieren kann. In PostgreSQL 14 und 15 können Kunden die Rolle pg_read_all_data manuell azure_pg_admin gewähren, um dasselbe Ergebnis zu erzielen. In PostgreSQL 11 bis 13 existiert die Rolle pg_read_all_data jedoch nicht.

Kunden können die erforderlichen Berechtigungen nicht direkt erteilen. Wenn Sie pgstattuple ausführen müssen, um auf Objekte unter dem Schema pg_toast zuzugreifen, stellen Sie eine Azure-Supportanfrage.

timescaleDB

Die timescaleDB-Erweiterung ist eine Zeitreihendatenbank, die als eine Erweiterung für PostgreSQL verpackt wird. Sie bietet zeitlich orientierte Analysefunktionen und Optimierungen, und skaliert Postgres für Zeitreihenworkloads. Erfahren Sie mehr über TimescaleDB, eine eingetragene Marke von Timescale, Inc. Azure Database for PostgreSQL, bietet die TimescaleDB Apache-2 Edition.

Installieren von TimescaleDB

Um die Erweiterung zu verwenden timescaleDB, stellen Sie sicher, dass Sie die Erweiterung zulassen , ihre Bibliothek laden und die Erweiterung in der Datenbank installieren, auf der Sie ihre Funktionalität verwenden möchten.

Sie können jetzt eine TimescaleDB-Hypertable von Grund auf neu erstellen oder vorhandene Zeitreihendaten in PostgreSQL migrieren.

Weitere Informationen zum Wiederherstellen einer Zeitskalendatenbank mit pg_dump und pg_restorefinden Sie in der Timescale-Dokumentation.

Wiederherstellen einer Timescale-Datenbank mithilfe von timescaledb-backup

Beim Ausführen der SELECT timescaledb_post_restore()-Prozedur erhalten Sie möglicherweise Berechtigungen, die beim Aktualisieren des Flags timescaledb.restoring verweigert werden. Der Grund, warum Sie diesen Fehler erhalten, liegt an der eingeschränkten ALTER DATABASE-Berechtigung in Cloud PaaS-Datenbankdiensten. In diesem Fall können Sie eine alternative Methode mit dem Tool timescaledb-backup zum Sichern und Wiederherstellen der Timescale-Datenbank ausführen. Timescaledb-backup ist ein Programm, mit dem eine TimescaleDB-Datenbank einfacher, zuverlässiger und leistungsfähiger gesichert und wiederhergestellt werden kann.

Gehen Sie dazu folgendermaßen vor:

  1. Installieren Sie die Hier beschriebenen Tools.

  2. Erstellen Sie einen Zielserver und eine Zieldatenbank in Azure Database for PostgreSQL – Flexible Server.

  3. Aktivieren Sie die Zeitskalenerweiterung.

  4. Gewähren Sie dem Benutzer, der von azure_pg_admin verwendet wird, die Rolle.

  5. Führen Sie "ts-restore " aus, um die Datenbank wiederherzustellen.

Weitere Details zu diesen Dienstprogrammen finden Sie hier.

Erweiterungen und Upgrade der Hauptversion

Azure Database for PostgreSQL bietet ein Feature für direkte Upgrades von Major-Versionen, das mit nur einer einfachen Benutzerinteraktion ein direktes Upgrade des flexiblen Servers für Azure Database for PostgreSQL durchführt. Direkte Hauptversionsupgrades vereinfachen den Upgradeprozess von Azure Database for PostgreSQL, minimieren Störungen für Benutzer und Anwendungen, die auf den Server zugreifen. Von direkten Hauptversionsupgrades werden spezifische Erweiterungen nicht unterstützt, und es gibt einige Einschränkungen für das Upgraden bestimmter Erweiterungen.

Die Erweiterungen anon, Apache AGE, dblink, orafce, postgres_fdw und timescaledb werden bei Verwendung des Features für direkte Hauptversionsupdates nicht für alle Versionen von Azure Database for PostgreSQL – Flexible Server unterstützt.

Module mit bestimmten Überlegungen

In der folgenden Liste werden alle unterstützten Module aufgelistet, die bestimmte Überlegungen erfordern, wenn sie in einem Azure Database for PostgreSQL flexiblen Server verwendet werden:

  • pg_failover_slots

pg_failover_slots

Das pg_failover_slots Modul verbessert die Azure-Datenbank für PostgreSQL, wenn sie sowohl mit logischer Replikation als auch mit aktivierten Servern mit hoher Verfügbarkeit ausgeführt wird. Sie behebt effektiv die Herausforderung innerhalb des standardmäßigen PostgreSQL-Moduls, das logische Replikationsslots nach einem Failover nicht beibehält. Die Aufrechterhaltung dieser Slots ist wichtig, um Replikationspausen oder Datenübereinstimmungen während Änderungen der primären Serverrolle zu verhindern und die Betriebskontinuität und Datenintegrität sicherzustellen.

Die Erweiterung optimiert den Failoverprozess, indem die erforderliche Übertragung, Bereinigung und Synchronisierung von Replikationsplätzen verwaltet wird, wodurch ein nahtloser Übergang während Serverrollenänderungen gewährleistet wird.

Weitere Informationen und Anweisungen zur Verwendung des pg_failover_slots Moduls finden Sie auf der GitHub-Seite.

Um das pg_failover_slots Modul zu verwenden, stellen Sie sicher, dass die Bibliothek beim Starten des Servers geladen wird .