Udostępnij za pośrednictwem


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 EXTENSIONlub COMMENT 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 EXTENSIONpoleceń , DROP EXTENSIONALTER EXTENSIONlub 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

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_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.

Przykłady

  1. 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'$$);
    
  2. Aby uruchomić próżnię codziennie o godzinie 10:00 (GMT) w domyślnej bazie danych postgres.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. Aby cofnąć wszystkie zadania z programu pg_cron.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Aby wyświetlić wszystkie zadania aktualnie zaplanowane za pomocą pg_cronpolecenia .

    SELECT * FROM cron.job;
    
  5. Aby codziennie uruchamiać próżnię o godzinie 10:00 (GMT) w bazie danych test cron na azure_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.

  1. 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');
    
  2. 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ą 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. 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_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 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.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. 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ć timescaleDBpolecenia , 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_dumppg_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:

  1. Zainstaluj narzędzia zgodnie z opisem w tym miejscu.

  2. Utwórz docelowe wystąpienie serwera elastycznego i bazę danych usługi Azure Database for PostgreSQL.

  3. Włącz rozszerzenie Skali czasu.

  4. Udziel roli użytkownikowi azure_pg_admin , który jest używany przez funkcję ts-restore.

  5. 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, dblinkpgauditorafce, , postgres_fdwi 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.