Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano pewne specjalne zagadnienia, które należy wziąć pod uwagę podczas korzystania z niektórych rozszerzeń lub modułów w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL.
Zagadnienia ogólne dotyczące rozszerzeń
Aby użyć rozszerzenia w wystąpieniu serwera elastycznego 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 EXTENSIONlubCOMMENT ON EXTENSIONkoń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.
- Usuń 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 poleceń CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION lub COMMENT ON EXTENSION na wystąpieniu elastycznego serwera Azure Database for PostgreSQL, sprawdź listę możliwych błędów i przyczyny każdego z tych błędów.
Zagadnienia ogólne dotyczące modułów
Aby użyć modułu w elastycznym serwerze usługi Azure Database for PostgreSQL, wystarczy dodać go do parametru shared_preload_libraries serwera zgodnie z opisem w Ładowanie bibliotek.
Moduły nie muszą być dodane do listy 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 w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL:
AGEdblinkpg_buffercachepg_cronpg_hint_planpg_prewarmpg_repackpg_stat_statementspostgres_fdwpgstattuple
AGE
Rozszerzenie Apache AGE to rozszerzenie grafu dla bazy danych PostgreSQL obsługiwane przez usługę Azure Database for PostgreSQL. Zapewnia ona funkcjonalności bazy danych grafowych, obsługę zapytań OpenCypher oraz możliwość wykonywania złożonych zapytań na danych grafowych przechowywanych w PostgreSQL. "Apache AGE" to projekt open source wydany w ramach licencji Apache License 2.0.
Instalowanie programu AGE
Aby użyć AGE, upewnij się, że dodasz rozszerzenie do „allowlist”, załadujesz jego bibliotekę i zainstalujesz rozszerzenie w bazie danych, w której planujesz używać jego funkcji.
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. Usługa Azure Database for PostgreSQL obsługuje połączenia przychodzące 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_cronwartość . 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_librarieselementu 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.
Examples
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_cronpolecenia .SELECT * FROM cron.job;Aby codziennie uruchamiać próżnię o godzinie 10:00 (GMT) w bazie danych
test cronnaazure_pg_adminkoncie 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 niezerową wartość wymaga uprawnień superużytkownika PostgreSQL i nie jest obsługiwane dla instancji Azure Database for PostgreSQL Flexible Server. 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.
Example:
/*+
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ą bhashjoinjako .
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. Funkcjonalność autoprewarm dla 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 artefakty SQL, które tworzy, oraz bibliotekę języka C implementujących 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_adminprogramu .
Możesz zauważyć, że jeśli właściciel tabeli, który nie azure_pg_adminjest , próbuje uruchomić pg_repackpolecenie , 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 udostępnia widok 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 dodać do listy dozwolonychrozszerzenie pg_stat_statements 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.tracknone. 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. Usługa Azure Database for PostgreSQL obsługuje połączenia przychodzące 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 wersji 11-13 PostgreSQL na elastycznym serwerze usługi Azure Database for PostgreSQL nie mogą używać rozszerzenia pgstattuple na 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. Azure Database for PostgreSQL, która udostępnia wersję Apache-2 bazy danych TimescaleDB.
Instalowanie bazy danych TimescaleDB
Aby użyć timescaleDB, upewnij się, że dodać na listę dozwolonych rozszerzenie, załaduj jego bibliotekę i zainstaluj rozszerzenie w bazie danych, na której planujesz używać jego 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 Timescale przy użyciu pg_dump i pg_restore, zobacz dokumentację Timescale.
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
Usługa Azure Database for PostgreSQL oferuje funkcję uaktualniania wersji głównej na miejscu, która wykonuje bezpośrednie uaktualnienie elastycznego serwera usługi Azure Database for PostgreSQL, przy minimalnej interakcji ze strony użytkownika. Uaktualnienie głównej wersji bezpośrednio upraszcza proces aktualizacji bazy danych Azure Database for PostgreSQL, minimalizując zakłócenia dla użytkowników i aplikacji, które korzystają z dostępu 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, orafce, postgres_fdw i timescaledb nie są obsługiwane dla wszystkich wersji elastycznych wystąpień serwera usługi Azure Database for PostgreSQL podczas używania funkcji aktualizacji głównej wersji na miejscu.
Moduły z konkretnymi zagadnieniami
Poniższa lista wylicza wszystkie obsługiwane moduły, które wymagają konkretnych zagadnień w przypadku użycia w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL:
pg_failover_slots
pg_failover_slots
Moduł pg_failover_slots rozszerza usługę Azure Database for PostgreSQL podczas pracy zarówno z replikacją logiczną, jak i serwerami z włączoną wysoką 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 modułu pg_failover_slots można znaleźć na stronie usługi GitHub.
Aby użyć modułu pg_failover_slots , upewnij się, że biblioteka została załadowana po uruchomieniu serwera.