Zagadnienia dotyczące używania rozszerzeń i modułów
W tym artykule opisano kilka szczególnych zagadnień, o których należy pamiętać podczas korzystania z niektórych rozszerzeń lub modułów na serwerze elastycznym usługi Azure Database for PostgreSQL.
Zagadnienia ogólne dotyczące rozszerzeń
Aby użyć rozszerzenia na serwerze elastycznym usługi Azure Database for PostgreSQL, musisz:
-
Zezwalaj na rozszerzenie. Jeśli rozszerzenie nie jest dozwolone, każda próba wykonania
CREATE EXTENSION
,ALTER EXTENSION
,DROP EXTENSION
lubCOMMENT ON EXTENSION
kończy się niepowodzeniem z powodu błędu wskazującego, że określone rozszerzenie nie jest dozwolone. - Jeśli rozszerzenie wdraża udostępnioną bibliotekę binarną, która wymaga przydzielania i uzyskiwania dostępu do pamięci udostępnionej i musi zostać załadowana podczas uruchamiania serwera, należy również postępować zgodnie z instrukcjami podanymi w bibliotekach ładowania.
- Utwórz rozszerzenie w bazach danych, w których chcesz, aby rozszerzenie wdrażało obiekty SQL dystrybuowane za pomocą tego rozszerzenia.
- Upuść rozszerzenie. Jeśli chcesz usunąć z bazy danych, w której wykonasz polecenie, wszystkie obiekty SQL dystrybuowane przez to rozszerzenie.
- Zaktualizuj rozszerzenia, aby zaktualizować do najnowszej wersji wszystkie artefakty SQL wdrożone przez rozszerzenie, które jest już zainstalowane.
- Wyświetl zainstalowane rozszerzenia i odpowiadające im wersje.
Jeśli wystąpi błąd podczas wykonywania CREATE EXTENSION
poleceń , DROP EXTENSION
ALTER EXTENSION
lub COMMENT ON EXTENSION
na serwerze elastycznym usługi Azure Database for PostgreSQL, zapoznaj się z listą możliwych błędów i przyczyną każdego z tych błędów.
Zagadnienia ogólne dotyczące modułów
Aby użyć modułu na serwerze elastycznym usługi Azure Database for PostgreSQL, musisz dodać go tylko do parametru shared_preload_libraries
serwera zgodnie z opisem w temacie Load Libraries (Ładowanie bibliotek).
Moduły nie muszą być wyświetlane na liście dozwolonych. Jest to wyłączne wymaganie dla rozszerzeń.
Rozszerzenia z konkretnymi zagadnieniami
Poniższa lista wylicza wszystkie obsługiwane rozszerzenia, które wymagają konkretnych zagadnień w przypadku użycia na serwerze elastycznym usługi Azure Database for PostgreSQL:
dblink
pg_buffercache
pg_cron
pg_hint_plan
pg_prewarm
pg_repack
pg_stat_statements
postgres_fdw
pgstattuple
dblink
Rozszerzenie dblink
umożliwia nawiązywanie połączenia z jednego wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL z inną lub inną bazą danych na tym samym serwerze. Serwer elastyczny usługi Azure Database for PostgreSQL obsługuje zarówno połączenia przychodzące, jak i wychodzące z dowolnym serwerem PostgreSQL. Serwer wysyłający musi zezwalać na połączenia wychodzące z serwerem odbierający. Podobnie serwer odbierający musi zezwalać na połączenia z serwera wysyłającego.
Jeśli planujesz używać tego rozszerzenia, zalecamy wdrożenie serwerów za pomocą integracji z siecią wirtualną. Domyślnie integracja sieci wirtualnej umożliwia nawiązywanie połączeń między serwerami w sieci wirtualnej. Możesz również użyć sieci wirtualnej sieciowych grup zabezpieczeń w celu dostosowania dostępu.
pg_buffercache
Rozszerzenie pg_buffercache
może służyć do badania zawartości shared_buffers. Korzystając z tego rozszerzenia, można określić, czy określona relacja jest buforowana (w pliku shared_buffers
). To rozszerzenie może pomóc w rozwiązywaniu problemów z wydajnością (problemy z wydajnością związane z buforowaniem).
To rozszerzenie jest zintegrowane z podstawową instalacją bazy danych PostgreSQL i jest łatwe do zainstalowania.
CREATE EXTENSION pg_buffercache;
pg_cron
Rozszerzenie pg_cron
jest prostym, opartym na cron harmonogramie zadań dla bazy danych PostgreSQL, który działa wewnątrz bazy danych jako rozszerzenie. Rozszerzenie pg_cron
może uruchamiać zaplanowane zadania konserwacji w bazie danych PostgreSQL. Można na przykład uruchomić okresową próżnię tabeli lub usunąć stare zadania danych.
pg_cron
Rozszerzenie może uruchamiać wiele zadań równolegle, ale uruchamia w danym momencie co najwyżej jedno wystąpienie zadania. Jeśli drugi przebieg ma rozpoczynać się przed pierwszym zakończeniem, drugi przebieg jest kolejkowany i uruchamiany natychmiast po zakończeniu pierwszego przebiegu. W taki sposób gwarantuje, że zadania są uruchamiane dokładnie tyle razy, ile zaplanowano i nie są uruchamiane jednocześnie z samymi sobą.
Upewnij się, że ustawiona wartość shared_preload_libraries
zawiera pg_cron
wartość . To rozszerzenie nie obsługuje ładowania biblioteki jako efektu wykonywania polecenia CREATE EXTENSION. Każda próba uruchomienia polecenia CREATE EXTENSION, jeśli rozszerzenie nie zostało dodane do shared_preload_libraries
elementu lub serwer nie został ponownie uruchomiony po jego dodaniu, powoduje błąd, którego tekst mówi pg_cron can only be loaded via shared_preload_libraries
, i którego wskazówka to Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf
.
Aby użyć polecenia pg_cron
, upewnij się, że biblioteka udostępniona jest ładowana po uruchomieniu serwera, jest ona na liście dozwolonych i jest zainstalowana w dowolnej bazie danych, z której chcesz korzystać z jej funkcji, przy użyciu tworzonych artefaktów SQL.
Przykłady
Aby usunąć stare dane w sobotę o 3:30 (GMT).
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
Aby uruchomić próżnię codziennie o godzinie 10:00 (GMT) w domyślnej bazie danych
postgres
.SELECT cron.schedule('0 10 * * *', 'VACUUM');
Aby cofnąć wszystkie zadania z programu
pg_cron
.SELECT cron.unschedule(jobid) FROM cron.job;
Aby wyświetlić wszystkie zadania aktualnie zaplanowane za pomocą
pg_cron
polecenia .SELECT * FROM cron.job;
Aby codziennie uruchamiać próżnię o godzinie 10:00 (GMT) w bazie danych
test cron
naazure_pg_admin
koncie roli.SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
Więcej przykładów
pg_cron
Począwszy od wersji 1.4, można użyć cron.schedule_in_database
funkcji icron.alter_job
, aby zaplanować zadanie w określonej bazie danych i zaktualizować istniejący harmonogram, odpowiednio.
Funkcja cron_schedule_in_database
umożliwia określenie nazwy użytkownika jako parametru opcjonalnego. Ustawienie nazwy użytkownika na wartość inną niż null wymaga uprawnień administratora postgreSQL i nie jest obsługiwane na serwerze elastycznym usługi Azure Database for PostgreSQL. W poprzednich przykładach pokazano uruchamianie tej funkcji z opcjonalnym parametrem nazwy użytkownika pominiętym lub ustawionym na wartość null, co powoduje uruchomienie zadania w kontekście planowania zadania przez użytkownika, które powinno mieć azure_pg_admin
uprawnienia roli.
Aby usunąć stare dane w sobotę o 3:30 (GMT) w bazie danych DBName.
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
Aby zaktualizować lub zmienić nazwę bazy danych dla istniejącego harmonogramu
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_hint_plan
Rozszerzenie pg_hint_plan
umożliwia dostosowanie planów wykonywania bazy danych PostgreSQL przy użyciu tak zwanych "wskazówek" w komentarzach SQL, takich jak:
/*+ SeqScan(a) */
pg_hint_plan
Rozszerzenie odczytuje frazy wskazówek w komentarzu do formularza specjalnego podanego przy użyciu docelowej instrukcji SQL. Określony formularz zaczyna się od sekwencji znaków "/*+" i kończy się znakiem "*/". Frazy wskazówek składają się z nazw wskazówek i następujących parametrów ujętych w nawiasy i rozdzielonych spacjami. Nowe wiersze umożliwiające czytelność mogą rozdzielać poszczególne frazy wskazówek.
Przykład:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
Poprzedni przykład powoduje, że planista używa wyników seqscan
tabeli do a
łączenia z tabelą b
hashjoin
jako .
Aby użyć pg_hint_plan
rozszerzenia, upewnij się, że rozszerzenie jest dozwolone , załaduj jego bibliotekę i zainstaluj rozszerzenie w bazie danych, na której planujesz używać jego funkcji.
pg_prewarm
pg_prewarm
Rozszerzenie ładuje dane relacyjne do pamięci podręcznej. Wstępne tworzenie pamięci podręcznych oznacza, że zapytania mają lepsze czasy odpowiedzi podczas pierwszego uruchomienia po ponownym uruchomieniu. Funkcja autoprewarm dla serwera elastycznego PostgreSQL nie jest obecnie dostępna w usłudze Azure Database.
pg_repack
Użytkownicy rozszerzenia po raz pg_repack
pierwszy zadają następujące pytanie: Czy pg_repack
rozszerzenie lub plik wykonywalny po stronie klienta, taki jak psql
lub pg_dump
?
pg_repack jest rzeczywiście oba. pg_repack/lib zawiera kod rozszerzenia, w tym schemat i tworzone artefakty SQL, oraz bibliotekę języka C implementujące kod kilku z tych funkcji.
Z drugiej strony pg_repack /bin zawiera kod aplikacji klienckiej, który wie, jak wchodzić w interakcje z elementami możliwości programowania zaimplementowanymi w rozszerzeniu. Ta aplikacja kliencka ma na celu ułatwienie złożoności interakcji z różnymi interfejsami, które są udostępniane przez rozszerzenie po stronie serwera. Oferuje on użytkownikowi niektóre opcje wiersza polecenia, które są łatwiejsze do zrozumienia. Aplikacja kliencka jest bezużyteczna bez rozszerzenia utworzonego w bazie danych, na którą wskazuje. Rozszerzenie po stronie serwera byłoby w pełni funkcjonalne, ale wymagałoby od użytkownika zrozumienia skomplikowanego wzorca interakcji. Ten wzorzec polegałby na wykonywaniu zapytań w celu pobrania danych używanych jako dane wejściowe do funkcji implementowanych przez rozszerzenie itp.
Odmowa uprawnień do ponownego pakowywania schematu
Obecnie, ponieważ udzielamy uprawnień do schematu ponownego tworzenia pakietu utworzonego przez to rozszerzenie, obsługujemy tylko uruchamianie pg_repack
funkcji z kontekstu azure_pg_admin
programu .
Możesz zauważyć, że jeśli właściciel tabeli, który nie azure_pg_admin
jest , próbuje uruchomić pg_repack
polecenie , otrzymuje następujący błąd:
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()
Aby uniknąć tego błędu, uruchom pg_repack z kontekstu .azure_pg_admin
pg_stat_statements
Rozszerzenie pg_stat_statements umożliwia wyświetlenie wszystkich zapytań uruchamianych w bazie danych. Te informacje są przydatne do zrozumienia wydajności obciążenia zapytań w systemie produkcyjnym.
Rozszerzenie pg_stat_statements jest wstępnie ładowane w shared_preload_libraries
każdym wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL w celu zapewnienia środków śledzenia statystyk wykonywania instrukcji SQL.
Ze względów bezpieczeństwa należy zezwolić na listę pg_stat_statements rozszerzenia i zainstalować je przy użyciu polecenia CREATE EXTENSION.
Ustawienie pg_stat_statements.track
, które kontroluje instrukcje top
, które śledzi rozszerzenie, domyślnie ma wartość , co oznacza, że wszystkie instrukcje wydane bezpośrednio przez klientów są śledzone. Dwa pozostałe poziomy śledzenia to none
i all
. To ustawienie można skonfigurować jako parametr serwera.
Istnieje kompromis między informacjami wykonywania zapytania, które pg_stat_statements
rozszerzenie zapewnia na wydajności serwera, ponieważ rejestruje każdą instrukcję SQL. Jeśli nie korzystasz aktywnie z pg_stat_statements
rozszerzenia, zalecamy ustawienie wartości pg_stat_statements.track
none
. Niektóre usługi monitorowania innych firm mogą polegać na pg_stat_statements
dostarczaniu szczegółowych informacji o wydajności zapytań, dlatego upewnij się, czy jest to możliwe.
postgres_fdw
Rozszerzenie postgres_fdw
umożliwia nawiązywanie połączenia z jednego wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL z inną lub inną bazą danych na tym samym serwerze. Serwer elastyczny usługi Azure Database for PostgreSQL obsługuje zarówno połączenia przychodzące, jak i wychodzące z dowolnym serwerem PostgreSQL. Serwer wysyłający musi zezwalać na połączenia wychodzące z serwerem odbierający. Podobnie serwer odbierający musi zezwalać na połączenia z serwera wysyłającego.
Jeśli planujesz używać tego rozszerzenia, zalecamy wdrożenie serwerów za pomocą integracji z siecią wirtualną. Domyślnie integracja sieci wirtualnej umożliwia nawiązywanie połączeń między serwerami w sieci wirtualnej. Możesz również użyć sieci wirtualnej sieciowych grup zabezpieczeń w celu dostosowania dostępu.
pgstattuple
W przypadku używania pgstattuple
rozszerzenia do próby uzyskania statystyk krotki z obiektów przechowywanych w pg_toast
schemacie w wersjach programu Postgres od 11 do 13 występuje błąd "odmowa uprawnień dla pg_toast schematu".
Odmowa uprawnień dla pg_toast schematu
Klienci korzystający z bazy danych PostgreSQL w wersji od 11 do 13 w usłudze Azure Database for Flexible Server nie mogą używać pgstattuple
rozszerzenia w obiektach w schemacie pg_toast
.
W przypadku bazy danych PostgreSQL 16 i 17 pg_read_all_data
rola jest automatycznie udzielana funkcji azure_pg_admin
, co pozwala pgstattuple
na poprawne działanie. W programie PostgreSQL 14 i 15 klienci mogą ręcznie udzielić pg_read_all_data
roli, aby azure_pg_admin
osiągnąć ten sam wynik. Jednak w programie PostgreSQL od 11 do 13 pg_read_all_data
rola nie istnieje.
Klienci nie mogą bezpośrednio udzielać niezbędnych uprawnień. Jeśli musisz mieć możliwość uruchomienia pgstattuple
w celu uzyskania dostępu do obiektów w schemaciepg_toast
, utwórz żądanie pomoc techniczna platformy Azure.
timescaleDB
timescaleDB
Rozszerzenie jest bazą danych szeregów czasowych spakowanych jako rozszerzenie dla bazy danych PostgreSQL. Zapewnia ona funkcje analityczne i optymalizacje i skalowanie bazy danych Postgres dla obciążeń szeregów czasowych.
Dowiedz się więcej na temat bazy danych TimescaleDB, zarejestrowanego znaku towarowego Timescale, Inc. Elastycznego serwera usługi Azure Database for PostgreSQL, który udostępnia wersję Apache-2 bazy danych TimescaleDB.
Instalowanie bazy danych TimescaleDB
Aby użyć timescaleDB
polecenia , upewnij się, że rozszerzenie jest dozwolone , załaduj jego bibliotekę i zainstaluj rozszerzenie w bazie danych, na której planujesz używać jej funkcji.
Teraz możesz utworzyć hipertable bazy danych TimescaleDB od podstaw lub zmigrować istniejące dane szeregów czasowych w usłudze PostgreSQL.
Aby uzyskać więcej informacji na temat przywracania bazy danych w skali czasu przy użyciu i pg_dump
pg_restore
, zobacz dokumentację skali czasu.
Przywracanie bazy danych w skali czasu przy użyciu kopii zapasowej bazy danych timescaledb
Podczas wykonywania SELECT timescaledb_post_restore()
procedury można uzyskać uprawnienia odmowy podczas aktualizowania flagi timescaledb.restoring. Przyczyną tego błędu jest ograniczone uprawnienie ALTER DATABASE w usługach baz danych PaaS w chmurze. W takim przypadku możesz wykonać alternatywną metodę przy użyciu timescaledb-backup
narzędzia do tworzenia kopii zapasowej i przywracania bazy danych w skali czasu. Timescaledb-backup to program, który sprawia, że dumping i przywracanie bazy danych TimescaleDB jest prostsze, mniej podatne na błędy i bardziej wydajne.
W tym celu wykonaj następujące kroki:
Zainstaluj narzędzia zgodnie z opisem w tym miejscu.
Utwórz docelowe wystąpienie serwera elastycznego i bazę danych usługi Azure Database for PostgreSQL.
Włącz rozszerzenie Skali czasu.
Udziel roli użytkownikowi
azure_pg_admin
, który jest używany przez funkcję ts-restore.Uruchom polecenie ts-restore , aby przywrócić bazę danych.
Więcej informacji na temat tych narzędzi można znaleźć tutaj.
Rozszerzenia i uaktualnienie wersji głównej
Serwer elastyczny usługi Azure Database for PostgreSQL oferuje wbudowaną funkcję uaktualniania wersji głównej, która wykonuje uaktualnienie w miejscu wystąpienia elastycznego serwera usługi Azure Database for PostgreSQL z prostą interakcją od użytkownika. Uaktualnienie wersji głównej w miejscu upraszcza proces uaktualniania serwera elastycznego usługi Azure Database for PostgreSQL, minimalizując zakłócenia dla użytkowników i aplikacji, które uzyskują dostęp do serwera. W miejscu uaktualnienia wersji głównej nie obsługują określonych rozszerzeń i istnieją pewne ograniczenia dotyczące uaktualniania niektórych rozszerzeń.
Rozszerzenia anon
, , Apache AGE
, dblink
pgaudit
orafce
, , postgres_fdw
i timescaledb
nie są obsługiwane dla wszystkich elastycznych wersji serwera usługi Azure Database for PostgreSQL w przypadku korzystania z funkcji aktualizacji wersji głównej w miejscu.
Moduły z konkretnymi zagadnieniami
Poniższa lista wylicza wszystkie obsługiwane moduły, które wymagają konkretnych zagadnień w przypadku użycia na serwerze elastycznym usługi Azure Database for PostgreSQL:
pg_failover_slots
pg_failover_slots
Rozszerzenie pg_failover_slots
rozszerza serwer elastyczny usługi Azure Database for PostgreSQL podczas pracy z replikacją logiczną i serwerami z obsługą wysokiej dostępności. Skutecznie rozwiązuje to wyzwanie w ramach standardowego aparatu PostgreSQL, który nie zachowuje miejsc replikacji logicznej po przejściu w tryb failover. Utrzymanie tych miejsc ma kluczowe znaczenie, aby zapobiec wstrzymaniu replikacji lub niezgodności danych podczas zmian roli serwera podstawowego, zapewniając ciągłość działania i integralność danych.
Rozszerzenie usprawnia proces pracy w trybie failover, zarządzając niezbędnym transferem, oczyszczaniem i synchronizacją miejsc replikacji, zapewniając w ten sposób bezproblemowe przejście podczas zmian roli serwera.
Więcej informacji i instrukcji dotyczących korzystania z pg_failover_slots
rozszerzenia można znaleźć na stronie usługi GitHub.
Aby użyć pg_failover_slots
rozszerzenia, upewnij się, że jego biblioteka została załadowana po uruchomieniu serwera.