Freigeben über


Überlegungen bei der Verwendung von Erweiterungen und Modulen

In diesem Artikel werden besondere Aspekte beschrieben, die Sie beachten sollten, wenn Sie bestimmte Erweiterungen oder Module von Azure Database for PostgreSQL – Flexibler Server verwenden.

Allgemeine Überlegungen bei Erweiterungen

Um eine Erweiterung in Azure Database for PostgreSQL – Flexibler Server zu verwenden, müssen Sie Folgendes tun:

  • Lassen Sie die Erweiterung zu. 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, die das Zuweisen und Zugreifen auf gemeinsam genutzten Arbeitsspeicher erfordert und beim Starten des Servers geladen werden muss, sollten Sie auch die Anweisungen unter Laden von Bibliotheken befolgen.
  • Erstellen Sie die Erweiterung in den Datenbanken, in denen Sie die mit dieser Erweiterung verteilten SQL-Objekte bereitstellen möchten.
  • Entfernen Sie die 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 die Erweiterungen, um alle SQL-Artefakte, die von einer bereits installierten Erweiterung bereitgestellt wurden, auf die neueste Version zu aktualisieren.
  • 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 Azure Database for PostgreSQL – Flexibler Server Fehler angezeigt werden, lesen Sie eine Liste der möglichen Fehler und was die Ursache für jeden dieser Fehler sein könnte.

Allgemeine Überlegungen bei Modulen

Wenn Sie ein Modul in Azure Database for PostgreSQL – Flexibler Server verwenden möchten, müssen Sie dieses nur dem Serverparameter shared_preload_libraries hinzufügen, wie unter Laden von Bibliotheken beschrieben.

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

Erweiterungen mit bestimmten Überlegungen

Nachfolgend finden Sie eine Liste der unterstützten Erweiterungen, die bestimmte Erwägungen erfordern, wenn sie in Azure Database for PostgreSQL – Flexibler Server verwendet werden:

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

Alter

Die Apache AGE-Erweiterung ist eine Graph-Erweiterung für PostgreSQL, die von Azure Database für PostgreSQL flexiblen Server 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 – Flexible Server unterstützen sowohl eingehende als auch ausgehende Verbindungen mit beliebigen PostgreSQL-Servern. 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 zum Überprüfen des Inhalts von shared_buffers verwendet werden. 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 bietet keine Unterstützung für das Laden der Bibliothek infolge 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.

Beispiele

  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-Superuserrechte 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

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.

Beispiel:

/*+
 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 Erweiterung pg_hint_plan 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.

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 den PostgreSQL – Flexible Server ist derzeit nicht in der Azure Database 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 enthält den Code für die Erweiterung, einschließlich der von ihr erstellten Schema- und SQL-Artefakte, und die C-Bibliothek, die den Code mehrerer dieser Funktionen implementiert.

Andererseits enthält pg_repack/bin den Code für die Clientanwendung, der weiß, wie mit den von der Erweiterung erstellten Programmierartefakten interagiert werden kann. 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 Erweiterung „pg_stat_statements“ können Sie alle Abfragen anzeigen, die in Ihrer Datenbank ausgeführt werden. Diese Information ist nützlich, um die Leistung ihrer Abfragearbeitsauslastung in einem Produktionssystem zu verstehen.

Die Erweiterung „pg_stat_statements“ wird in shared_preload_libraries auf jedem flexiblen Server von Azure Database for PostgreSQL vorab geladen, um eine Möglichkeit zur Nachverfolgung von Ausführungsstatistiken von SQL-Anweisungen zu schaffen.

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 – Flexible Server unterstützen sowohl eingehende als auch ausgehende Verbindungen mit beliebigen PostgreSQL-Servern. 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 auf Azure-Datenbank für flexiblen Server verwenden| Die pgstattuple Erweiterung kann nicht für Objekte innerhalb des pg_toast Schemas verwendet werden.

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. Weitere Informationen zu TimescaleDB, einer eingetragenen Marke von Timescale, Inc. Azure Database for PostgreSQL – Flexible Server stellt die Apache 2-Edition von TimescaleDB bereit.

Installieren von TimescaleDB

Um timescaleDB 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.

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

Weitere Informationen zum Wiederherstellen einer Timescale-Datenbank mit pg_dump und pg_restore finden Sie unter Dokumentation zu Timescale.

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.

Führen Sie dazu die folgenden Schritte aus:

  1. Installieren Sie die Tools gemäß dieser Anleitung.

  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 zum Wiederherstellen der Datenbank aus.

Weitere Informationen zu diesen Hilfsprogrammen finden Sie hier.

Erweiterungen und Upgrade der Hauptversion

Azure Database for PostgreSQL – Flexibler Server bietet ein Feature für direkte Upgrades der Hauptversion, mit dem die benutzende Person nur eine einfache Interaktion ausführen muss, um ein direktes Upgrade der Instanz von Azure Database for PostgreSQL Flexible Server durchzuführen. Direkte Hauptversionsupgrades vereinfachen den Upgradeprozess von Azure Database for PostgreSQL – Flexible Server und 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, pgaudit, postgres_fdw und timescaledb werden für alle Azure Database for PostgreSQL – Flexible Serverversionen nicht unterstützt, wenn sie Feature für direkte Hauptversionsupgrades verwenden.

Module mit bestimmten Überlegungen

Nachfolgend finden Sie eine Liste der unterstützten Module, die bestimmte Überlegungen erfordern, wenn sie in Azure Database for PostgreSQL – Flexibler Server verwendet werden:

  • pg_failover_slots

pg_failover_slots

Das pg_failover_slots-Modul verbessert Azure Database for PostgreSQL – Flexibler Server, wenn sowohl mit logischer Replikation als auch mit hochverfügbaren Servern gearbeitet 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 .