Hinweise zu für Azure Database for PostgreSQL – Flexible Server spezifischen Erweiterungen
In diesem Artikel werden besondere Aspekte beschrieben, die Sie beachten sollten, wenn Sie bestimmte Erweiterungen in einer Instanz von Azure Database for PostgreSQL Flexible Server verwenden.
Voraussetzungen
Der Artikel Verwenden von PostgreSQL-Erweiterungen für Azure Database für PostgreSQL enthält Informationen zu folgenden Themen:
- Wie Sie PostgreSQL-Erweiterungen in Azure Database for PostgreSQL Flexible Server auf die Positivliste setzen
- Wie Sie binäre Erweiterungsbibliotheken laden, denn diese erfordern die Zuweisung von sowie den Zugriff auf gemeinsam genutzten Arbeitsspeicher und müssen beim Serverstart geladen werden
- Wie Sie Erweiterungen in einer Datenbank installieren, sodass die in der Erweiterung gepackten SQL-Objekte in dieser Datenbank bereitgestellt werden und im jeweiligen Kontext darauf zugegriffen werden kann
- Wie Sie Erweiterungen aus bestimmten Datenbanken entfernen, sodass die in dieser Erweiterung gepackten SQL-Objekte aus dieser Datenbank entfernt werden
- Wie Sie die SQL-Artefakte aktualisieren, die von einer bereits installierten Erweiterung bereitgestellt werden
- Wie Sie die installierten Erweiterungen und deren entsprechende Versionen anzeigen
- Wie Sie die möglichen Fehler, die Sie beim Verwalten von Erweiterungen in Azure Database for PostgreSQL Flexible Server erhalten können, sowie deren mögliche Ursache in Erfahrung bringen
Erweiterungen
Nachfolgend finden Sie eine Liste der unterstützten Erweiterungen, die bestimmte Erwägungen erfordern, wenn sie im Dienst „Azure Database for PostgreSQL Flexible Server“ verwendet werden:
dblink
pg_buffercache
pg_cron
pg_failover_slots
pg_hint_plan
pg_prewarm
pg_repack
pg_stat_statements
postgres_fdw
pgstattuple
dblink
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 die Bibliothek beim Serverstart geladen wird, 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
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'$$);
Um das Vakuum täglich um 10:00 Uhr (GMT) in der Standarddatenbank
postgres
auszuführen.SELECT cron.schedule('0 10 * * *', 'VACUUM');
So heben Sie den Zeitplan für alle Tasks aus
pg_cron
aufSELECT cron.unschedule(jobid) FROM cron.job;
Anzeigen aller derzeit mit
pg_cron
geplanten AufträgeSELECT * FROM cron.job;
Um das Vakuum täglich um 10:00 Uhr (GMT) in der Datenbank
test cron
unter demazure_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.
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');
So aktualisieren oder ändern Sie den Datenbanknamen für den vorhandenen Zeitplan
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_failover_slots
Die pg_failover_slots
-Erweiterung verbessert Azure Database for PostgreSQL – Flexible 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 der pg_failover_slots
-Erweiterung finden Sie auf der GitHub-Seite.
Um die Erweiterung pg_failover_slots
zu verwenden, müssen Sie sicherstellen, dass die Bibliothek beim Serverstart geladen wurde.
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, schlussendlich 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. Dies 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 von der Erweiterung nachverfolgt werden, 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, welche die PostgreSQL-Versionen 11 bis 13 für Azure-Datenbank für flexible Server verwenden, können die Erweiterung pgstattuple
nicht für Objekte innerhalb des pg_toast
-Schemas nutzen.
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.
Wiederherstellen einer Timescale-Datenbank mit pg_dump und pg_restore
Zum Wiederherstellen einer Zeitskaladatenbank mithilfe von pg_dump
und pg_restore
müssen Sie zwei Hilfsprozeduren in der Zieldatenbank ausführen: timescaledb_pre_restore()
und timescaledb_post restore()
.
Bereiten Sie zuerst die Zieldatenbank vor:
--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;
SELECT timescaledb_pre_restore();
Jetzt können Sie pg_dump
auf der ursprünglichen Datenbank ausführen und dann pg_restore
ausführen. Stellen Sie nach der Wiederherstellung sicher, dass Sie den folgenden Befehl in der wiederhergestellten Datenbank ausführen:
SELECT timescaledb_post_restore();
Weitere Informationen zur Wiederherstellungsmethode mit Timescale-fähiger Datenbank finden Sie in der 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. Dies 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:
Installieren Sie die Tools gemäß dieser Anleitung.
Erstellen Sie eine Zieldatenbank und -Instanz für Azure Database for PostgreSQL – Flexibler Server.
Aktivieren Sie die Zeitskalenerweiterung.
Gewähren Sie dem Benutzer, der von ts-restore verwendet wird die
azure_pg_admin
-Rolle.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 Flexible 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.