Freigeben über


Überlegungen bei der Verwendung von Erweiterungen und Modulen

In diesem Artikel werden einige besondere Aspekte beschrieben, die Sie beachten müssen, wenn Sie bestimmte Erweiterungen oder Module in einer Azure-Datenbank für flexible Serverinstanz von PostgreSQL verwenden.

Allgemeine Überlegungen bei Erweiterungen

Um eine Erweiterung in Ihrer Azure-Datenbank für flexible Serverinstanz von PostgreSQL zu verwenden, müssen Sie:

  • Erweiterung zulassen. Wenn die Erweiterung nicht zulässig ist, tritt bei jedem Versuch, CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION oder COMMENT ON EXTENSION auszuführen, ein Fehler auf, der darauf hinweist, dass die Erweiterung nicht zulässig ist.
  • Wenn die Erweiterung eine freigegebene Binärbibliothek bereitstellt, für die das Zuweisen und Zugreifen auf gemeinsam genutzten Arbeitsspeicher erforderlich ist und beim Starten des Servers geladen werden muss, sollten Sie auch die Anweisungen befolgen, die in Ladebibliotheken bereitgestellt werden.
  • Erstellen Sie die Erweiterung in den Datenbanken, in denen die Erweiterung die MIT dieser Erweiterung verteilten SQL-Objekte bereitstellen soll.
  • Drop-Erweiterung. Wenn Sie die Erweiterung aus der Datenbank entfernen möchten, in der Sie den Befehl ausführen, werden alle SQL-Objekte, die von dieser Erweiterung verteilt werden, entfernt.
  • 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 Ihrer flexiblen Azure-Datenbank für PostgreSQL-Server Fehler auftreten, finden Sie eine Liste der möglichen Fehler und deren mögliche Ursachen.

Allgemeine Überlegungen bei Modulen

Wenn Sie ein Modul in Ihrer Azure-Datenbank für flexible Serverinstanz von PostgreSQL verwenden möchten, müssen Sie es nur dem shared_preload_libraries Serverparameter hinzufügen, 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 bestimmte Überlegungen erfordern, wenn sie in einer flexiblen Serverinstanz von Azure Database für PostgreSQL verwendet werden:

  • AGE
  • dblink
  • pg_buffercache
  • pg_cron
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • 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.

Die dblink-Erweiterung ermöglicht Ihnen das Herstellen einer Verbindung von einer Instanz von Azure Database for PostgreSQL – Flexible Server mit einer anderen oder mit einer anderen Datenbank auf demselben Server. 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, empfehlen wir die Bereitstellung Ihrer Server mit Virtual Network-Integration. 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

Die pg_buffercache Erweiterung kann verwendet werden, um den Inhalt von shared_buffers zu untersuchen. Mithilfe dieser Erweiterung können Sie feststellen, ob eine bestimmte Beziehung zwischengespeichert ist (in shared_buffers). Diese Erweiterung kann Ihnen bei der Behandlung von Leistungsproblemen helfen (Leistungsprobleme im Zusammenhang mit der Zwischenspeicherung).

Diese Erweiterung ist in die Core-Installation von PostgreSQL integriert und lässt sich einfach 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 Nicht-Null-Wert erfordert die Superuserberechtigung für PostgreSQL und wird für eine flexible Serverinstanz von Azure Database für PostgreSQL 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

Die pg_hint_plan-Erweiterung ermöglicht, PostgreSQL-Ausführungspläne mithilfe sogenannter „Hinweise“ in SQL-Kommentaren zu optimieren, wie:

/*+ 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;

Das vorherige Beispiel bewirkt, dass der Planer die Ergebnisse einer seqscan in Tabelle a verwendet, um sie mit Tabelle b als hashjoin zu kombinieren.

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

pg_prewarm

Die pg_prewarm-Erweiterung lädt relationale Daten in den Zwischenspeicher. Durch das Vorwärmen des Zwischenspeichers weisen Ihre Abfragen bei der ersten Ausführung nach einem Neustart bessere Reaktionszeiten auf. Die AutoPrewarm-Funktionalität für die PostgreSQL ist derzeit nicht in der Azure-Datenbank verfügbar.

pg_repack

Erstbenutzende der Erweiterung pg_repack stellen in der Regel folgende Frage: Ist pg_repack eine Erweiterung oder eine clientseitige ausführbare Datei wie psql oder pg_dump?

pg_repack ist in der Tat 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. Sie bietet dem Benutzer einige Befehlszeilenoptionen, die leichter zu verstehen sind. Die Clientanwendung ohne die in der Datenbank erstellte Erweiterung, auf die verwiesen wird, ist nutzlos. Die serverseitige Erweiterung selbst wäre voll funktionsfähig, erfordert jedoch, dass der Benutzer ein kompliziertes Interaktionsmuster versteht. Dieses Muster besteht darin, Abfragen auszuführen, um Daten abzurufen, die als Eingabe für Funktionen verwendet werden, die von der Erweiterung implementiert werden, usw.

Berechtigung verweigert für Repack-Schema

Da Berechtigungen derzeit dem Repack-Schema erteilt werden, das von dieser Erweiterung generiert wurde, wird die Ausführung von pg_repack-Funktionalität nur im Kontext von azure_pg_admin unterstützt.

Möglicherweise stellen Sie fest, dass der Besitzer einer Tabelle, der nicht azure_pg_admin ist, beim Versuch pg_repack auszuführen, eine Fehlermeldung wie die folgende 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 aus dem 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 in shared_preload_libraries jeder flexiblen Azure-Datenbank für PostgreSQL-Serverinstanz vorinstalliert, um eine Nachverfolgung von SQL-Anweisungsausführungsstatistiken zu ermöglichen.

Aus Sicherheitsgründen müssen Sie jedoch weiterhin die Erweiterung „pg_stat_statements“ in die Positivliste aufnehmen und sie mithilfe des Befehls 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. Diese Einstellung kann als Serverparameter konfiguriert werden.

Zwischen den von der pg_stat_statements-Erweiterung bereitgestellten Abfrageausführungsinformationen und der Serverleistung besteht ein Kompromiss, da jede SQL-Anweisung protokolliert wird. Wenn Sie die pg_stat_statements-Erweiterung nicht aktiv verwenden, sollten Sie pg_stat_statements.track auf none festlegen. 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.

postgres_fdw

Die postgres_fdw-Erweiterung ermöglicht Ihnen das Herstellen einer Verbindung von einer Instanz von Azure Database for PostgreSQL – Flexible Server mit einer anderen oder mit einer anderen Datenbank auf demselben Server. 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, empfehlen wir die Bereitstellung Ihrer Server mit Virtual Network-Integration. 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

Bei Verwendung der Erweiterung pgstattuple zum Abrufen von Tupelstatistiken von Objekten, die in den Postgres-Versionen 11 bis 13 im Schema pg_toast gespeichert sind, erhalten Sie einen Fehler vom Typ „Berechtigung verweigert für pg_toast-Schema“.

Berechtigung verweigert für pg_toast-Schema

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

In PostgreSQL 16 und 17 wird die Rolle pg_read_all_data automatisch azure_pg_admin gewährt, sodass pgstattuple ordnungsgemäß funktioniert. 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 im pg_toast-Schema zuzugreifen, fahren Sie mit dem Erstellen einer Azure-Supportanfrage fort.

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 eine Zieldatenbank und -Instanz für Azure Database for PostgreSQL – Flexibler 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 eine In-Place-Hauptversionsupgrade-Funktion, die ein Upgrade der flexiblen Serverinstanz von Azure Database für PostgreSQL mit nur einer einfachen Benutzerinteraktion direkt 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 für alle flexiblen Serverinstanzversionen von Azure Database für PostgreSQL nicht unterstützt, wenn die Funktion zur direkten Hauptversionsaktualisierung verwendet wird.

Module mit bestimmten Überlegungen

In der folgenden Liste werden alle unterstützten Module aufgelistet, die bei verwendung in einer flexiblen Azure-Datenbank für PostgreSQL-Serverinstanz bestimmte Überlegungen erfordern:

  • 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 wurde .