Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje některé zvláštní aspekty, o nichž je potřeba vědět při použití určitých rozšíření nebo modulů v instanci flexibilního serveru Azure Database for PostgreSQL.
Obecné aspekty s rozšířeními
Pokud chcete použít rozšíření v instanci flexibilního serveru Azure Database for PostgreSQL, musíte:
-
Povolit rozšíření Pokud rozšíření není povolené, žádný pokus o spuštění
CREATE EXTENSIONALTER EXTENSION,DROP EXTENSION, neboCOMMENT ON EXTENSIONselže s chybou označující, že odkazující rozšíření není povolené. - Pokud rozšíření nasadí některou sdílenou binární knihovnu, která vyžaduje přidělení sdílené paměti a přístup ke sdílené paměti a je třeba ji načíst při spuštění serveru, měli byste postupovat také podle pokynů uvedených v knihovnách načítání.
- Vytvořte rozšíření v databázích, ve kterých chcete rozšíření nasadit objekty SQL distribuované s tímto rozšířením.
- Rozšíření přetažení. Pokud chcete odebrat z databáze, ve které spustíte příkaz, všechny objekty SQL distribuované tímto rozšířením.
- Aktualizujte rozšíření, aby byly všechny artefakty SQL nasazené rozšířením, které je již nainstalované, aktualizovány na nejnovější verzi.
- Zobrazení nainstalovaných rozšíření a jejich odpovídajících verzí
Pokud dojde k chybě při provádění příkazů CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION nebo COMMENT ON EXTENSION na instanci flexibilního serveru Azure Database for PostgreSQL, prohlédněte si seznam možných chyb a zjistěte, co by mohlo být příčinou každé z těchto chyb.
Obecné aspekty modulů
Pokud chcete použít modul v instanci flexibilního serveru Azure Database for PostgreSQL, musíte ho přidat jen do parametru shared_preload_libraries serveru, jak je popsáno v části nahrávání knihoven.
Moduly nemusí být na seznamu povolených. To je výhradní požadavek na rozšíření.
Rozšíření s konkrétními aspekty
Následující seznam obsahuje výčet všech podporovaných rozšíření, která vyžadují konkrétní aspekty při použití v instanci flexibilního serveru Azure Database for PostgreSQL:
AGEdblinkpg_buffercachepg_cronpg_hint_planpg_prewarmpg_repackpg_stat_statementspostgres_fdwpgstattuple
AGE
Rozšíření Apache AGE je rozšíření grafu pro PostgreSQL podporované službou Azure Database for PostgreSQL. Poskytuje funkce grafové databáze, otevřenou podporu dotazů cypher a schopnost spouštět složité dotazy na grafová data uložená v PostgreSQL. Apache AGE je opensourcový projekt vydaný v rámci licence Apache License 2.0.
Instalace AGE
Pokud chcete používat AGE, ujistěte se, že rozšíření povolíte seznam, načtete její knihovnu a nainstalujete rozšíření do databáze, ve které plánujete využít její funkce.
dblink
Rozšíření dblink umožňuje připojit se z jedné instance flexibilního serveru Azure Database for PostgreSQL k jiné nebo jiné databázi na stejném serveru. Azure Database for PostgreSQL podporuje příchozí i odchozí připojení k libovolnému serveru PostgreSQL. Odesílající server musí povolit odchozí připojení k přijímajícímu serveru. Podobně přijímající server musí povolit připojení z odesílajícího serveru.
Pokud plánujete použít toto rozšíření, doporučujeme nasadit servery s integrací virtuální sítě. Integrace virtuální sítě ve výchozím nastavení umožňuje připojení mezi servery ve virtuální síti. K přizpůsobení přístupu můžete také použít skupiny zabezpečení sítě virtuální sítě.
pg_buffercache
Rozšíření pg_buffercache lze použít ke studiu obsahu shared_buffers. Pomocí tohoto rozšíření můžete zjistit, jestli je konkrétní relace uložena do mezipaměti (v shared_buffers). Toto rozšíření vám může pomoct při řešení potíží s výkonem (problémy s výkonem souvisejícími s ukládáním do mezipaměti).
Toto rozšíření je integrované s základní instalací PostgreSQL a snadno se instaluje.
CREATE EXTENSION pg_buffercache;
pg_cron
Toto pg_cron rozšíření je jednoduchý plánovač úloh založený na cron pro PostgreSQL, který běží uvnitř databáze jako rozšíření. Rozšíření pg_cron může spouštět úlohy plánované údržby v databázi PostgreSQL. Můžete například spustit pravidelné vakuum tabulky nebo odebrat staré datové úlohy.
Rozšíření pg_cron může paralelně spouštět více úloh, ale současně běží nejvýše jednu instanci úlohy. Pokud se má spustit druhé spuštění před dokončením prvního spuštění, druhé spuštění se zařadí do fronty a spustí se hned po dokončení prvního spuštění. Tímto způsobem zajišťuje, aby úlohy běžely přesně tolikrát, kolikrát jsou naplánované, a nespustí se souběžně s sebou.
Ujistěte se, že hodnota, která shared_preload_libraries je nastavena, zahrnuje pg_cron. Toto rozšíření nepodporuje načítání knihovny jako efekt spuštění příkazu CREATE EXTENSION. Jakýkoli pokus o spuštění CREATE EXTENSION, pokud rozšíření nebylo přidáno nebo shared_preload_librariesserver nebyl restartován po jeho přidání, má za následek chybu, jejíž text říká pg_cron can only be loaded via shared_preload_libraries, a jehož tip je Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.
Pokud chcete použít pg_cron, ujistěte se, že načítáte jeho sdílenou knihovnu při spuštění serveru, je na seznamu povolených a je nainstalovaná v jakékoli databázi, ze které chcete pracovat s jeho funkcemi, pomocí artefaktů SQL, které vytvoří.
Examples
Chcete-li odstranit stará data v sobotu v 3:30 (GMT).
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);Chcete-li spustit vakuum každý den v 10:00 (GMT) ve výchozí databázi
postgres.SELECT cron.schedule('0 10 * * *', 'VACUUM');Chcete-li zrušit naplánování všech úkolů od
pg_cron.SELECT cron.unschedule(jobid) FROM cron.job;Chcete-li zobrazit všechny úlohy, které jsou aktuálně naplánovány pomocí
pg_cron.SELECT * FROM cron.job;Pokud chcete v databázi
test cronpod účtem role spustit úklid každý den v 10:00 (GMT).azure_pg_adminSELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
Další příklady
pg_cron Počínaje verzí 1.4 můžete pomocí cron.schedule_in_database funkcí cron.alter_job naplánovat úlohu v konkrétní databázi a aktualizovat existující plán.
Funkce cron_schedule_in_database umožňuje uživatelské jméno jako volitelný parametr. Nastavení uživatelského jména na nenulovou hodnotu vyžaduje oprávnění superuživatele PostgreSQL a nepodporuje se pro instanci flexibilního serveru Azure Database for PostgreSQL. Předchozí příklady ukazují spuštění této funkce s nepovinným parametrem uživatelského jména vynechaným nebo nastaveným na hodnotu null, který spouští úlohu v kontextu uživatele plánujícího úlohu, která by měla mít azure_pg_admin oprávnění role.
Chcete-li odstranit stará data v sobotu v 3:30 (GMT) v databázi DBName.
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');Aktualizace nebo změna názvu databáze pro existující plán
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_hint_plan
Rozšíření pg_hint_plan umožňuje v komentářích SQL upravit plány provádění PostgreSQL pomocí tzv. "hints", například:
/*+ SeqScan(a) */
Rozšíření pg_hint_plan čte nápovědu frází v komentáři speciálního formuláře zadaného pomocí cílového příkazu SQL. Konkrétní formulář začíná sekvencí znaků /*+a končí znakem "*/". Fráze nápovědy se skládají z názvů nápovědy a následujících parametrů uzavřených závorky a oddělené mezerami. Nové řádky pro čitelnost můžou každou nápovědu oddělovat.
Example:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
Předchozí příklad způsobí, že plánovač použije výsledky seqscan tabulky a ke kombinování s tabulkou b jako tabulku hashjoin.
Pokud chcete rozšíření použít pg_hint_plan , ujistěte se, že rozšíření povolíte , načtete její knihovnu a nainstalujete rozšíření do databáze, na kterou chcete používat její funkce.
pg_prewarm
Rozšíření pg_prewarm načte relační data do mezipaměti. Předběžné sestavení mezipamětí znamená, že vaše dotazy mají lepší dobu odezvy při prvním spuštění po restartování. Funkce automatického přewarmu pro PostgreSQL není v současné době dostupná ve službě Azure Database.
pg_repack
Při prvním použití rozšíření se uživatelé pg_repack tohoto rozšíření obvykle ptají na následující otázku: Jedná se pg_repack o rozšíření nebo spustitelný soubor na straně klienta, například psql nebo pg_dump?
pg_repack je ve skutečnosti obojí. pg_repack/lib obsahuje kód pro rozšíření, včetně schématu a artefaktů SQL, které vytvoří, a knihovna jazyka C implementuje kód několika těchto funkcí.
Na druhé straně má pg_repack/bin kód klientské aplikace, který ví, jak pracovat s elementy programovatelnosti implementované v rozšíření. Cílem této klientské aplikace je usnadnit složitost interakce s různými rozhraními, která se zobrazí rozšířením na straně serveru. Nabízí uživateli některé možnosti příkazového řádku, které jsou srozumitelnější. Klientská aplikace je nepoužitá bez rozšíření vytvořeného v databázi, na kterou odkazuje. Rozšíření na straně serveru by samo o sobě bylo plně funkční, ale vyžadovalo by, aby uživatel porozuměl složitému vzoru interakce. Tento model by se skládal z provádění dotazů pro načtení dat, která se používají jako vstup do funkcí implementovaných rozšířením atd.
Oprávnění odepřeno pro opětovné zabalení schématu
Vzhledem k tomu, že v současné době udělujeme oprávnění ke schématu opětovného balení vytvořenému tímto rozšířením, podporujeme pouze spouštění pg_repack funkcí z kontextu azure_pg_admin.
Můžete si všimnout, že pokud se vlastník tabulky, který není azure_pg_admin, pokusí spustit pg_repack, skončí s následující chybou:
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()
Chcete-li se této chybě vyhnout, spusťte pg_repack z kontextu azure_pg_admin.
pg_stat_statements
Rozšíření pg_stat_statements vám poskytne přehled o všech dotazech, které běží ve vaší databázi. Tyto informace jsou užitečné pro pochopení výkonu úloh dotazů v produkčním systému.
Rozšíření pg_stat_statements je předem načtené na každé instanci flexibilního serveru Azure Database for PostgreSQL, aby poskytovalo prostředek ke sledování statistik provádění příkazů SQL.
Z bezpečnostních důvodů musíte povolit rozšířenípg_stat_statements a nainstalovat ho pomocí příkazu CREATE EXTENSION .
Nastavení pg_stat_statements.track, které řídí příkazy rozšíření stopy, výchozí nastavení , což znamená, že všechny příkazy topvydané přímo klienty jsou sledovány. Dvě další úrovně sledování jsou none a all. Toto nastavení je konfigurovatelné jako parametr serveru.
Mezi informacemi o pg_stat_statements spuštění dotazu, které rozšíření poskytuje na výkonu serveru, je kompromis, protože zaprotokoluje každý příkaz SQL. Pokud rozšíření aktivně nepoužíváte pg_stat_statements , doporučujeme nastavit pg_stat_statements.track možnost none. Některé monitorovací služby třetích stran se můžou spoléhat na pg_stat_statements poskytování přehledů výkonu dotazů, takže ověřte, jestli se jedná o případ za vás.
postgres_fdw
Rozšíření postgres_fdw umožňuje připojit se z jedné instance flexibilního serveru Azure Database for PostgreSQL k jiné nebo jiné databázi na stejném serveru. Azure Database for PostgreSQL podporuje příchozí i odchozí připojení k libovolnému serveru PostgreSQL. Odesílající server musí povolit odchozí připojení k přijímajícímu serveru. Podobně přijímající server musí povolit připojení z odesílajícího serveru.
Pokud plánujete použít toto rozšíření, doporučujeme nasadit servery s integrací virtuální sítě. Integrace virtuální sítě ve výchozím nastavení umožňuje připojení mezi servery ve virtuální síti. K přizpůsobení přístupu můžete také použít skupiny zabezpečení sítě virtuální sítě.
pgstattuple
Při použití rozšíření k pokusu pgstattuple o získání statistiky řazené kolekce členů z objektů uložených ve pg_toast schématu ve verzích Postgres 11 až 13 se zobrazí chyba "Oprávnění odepřeno pro schéma pg_toast".
Oprávnění odepřena pro pg_toast schématu
Zákazníci, kteří používají PostgreSQL ve verzích 11 až 13 na flexibilním serveru Azure Database pro PostgreSQL, nemohou používat pgstattuple rozšíření u objektů v rámci schématu pg_toast.
V PostgreSQL 16 a 17 pg_read_all_data se role automaticky udělí azure_pg_admin, což umožňuje pgstattuple správné fungování. V PostgreSQL 14 a 15 můžou zákazníci roli udělit pg_read_all_data ručně, aby azure_pg_admin dosáhli stejného výsledku. V PostgreSQL 11 až 13 však pg_read_all_data role neexistuje.
Zákazníci nemůžou přímo udělit potřebná oprávnění. Pokud potřebujete mít možnost spustit pgstattuple přístup k objektům v rámci schématupg_toast, pokračujte vytvořením požadavku podpora Azure.
timescaleDB
Rozšíření timescaleDB je databáze časových řad zabalená jako rozšíření pro PostgreSQL. Poskytuje časově orientované analytické funkce a optimalizace a škáluje Postgres pro úlohy časových řad.
Přečtěte si další informace o timescaleDB, registrované ochranné známce timescale, Inc. Azure Database for PostgreSQL poskytuje edici TimescaleDB Apache-2.
Instalujte TimescaleDB
Chcete-li použít timescaleDB, ujistěte se, že jste rozšíření povolili , načtěte její knihovnu a nainstalujte rozšíření do databáze, na kterou plánujete používat jeho funkce.
Teď můžete vytvořit hypertable timescaleDB úplně od začátku nebo migrovat stávající data časových řad v PostgreSQL.
Další informace o obnovení databáze časové osy pomocí pg_dump a pg_restorenaleznete v dokumentaci časové osy.
Obnovení databáze časové osy pomocí zálohy timescaledb
Při spuštění SELECT timescaledb_post_restore() tohoto postupu můžete získat oprávnění odepřená při aktualizaci příznaku timescaledb.restoring. Příčinou této chyby je omezené oprávnění ALTER DATABASE v databázových službách Cloud PaaS. V takovém případě můžete pomocí nástroje provést alternativní metodu timescaledb-backup zálohování a obnovení databáze časové osy. Timescaledb-backup je program, který usnadňuje dumping a obnovování databáze TimescaleDB, méně náchylné k chybám a výkonnější.
Postup je následující:
Nainstalujte nástroje, jak je podrobně popsáno tady.
Vytvořte cílovou instanci a databázi flexibilního serveru Azure Database for PostgreSQL.
Povolte rozšíření časové osy.
azure_pg_adminUdělte uživateli roli, kterou používá ts-restore.Spuštěním příkazu ts-restore obnovte databázi.
Další podrobnosti o těchto nástrojích najdete tady.
Rozšíření a upgrade hlavní verze
Azure Database for PostgreSQL nabízí funkci místního upgradu hlavní verze , která provádí místní upgrade instance flexibilního serveru Azure Database for PostgreSQL, a to pouze s jednoduchou interakcí od uživatele. Místní upgrade hlavní verze zjednodušuje proces upgradu služby Azure Database for PostgreSQL a minimalizuje přerušení přístupu uživatelů a aplikací k serveru. Místní upgrady hlavní verze nepodporují konkrétní rozšíření a pro upgrade určitých rozšíření existují určitá omezení.
Rozšíření anon, , Apache AGEdblink, orafcepostgres_fdw, a timescaledb nejsou podporovány pro všechny verze instance flexibilního serveru Azure Database for PostgreSQL při použití místní funkce aktualizace hlavní verze.
Moduly s konkrétními aspekty
Následující seznam obsahuje výčet všech podporovaných modulů, které vyžadují konkrétní aspekty při použití v instanci flexibilního serveru Azure Database for PostgreSQL:
pg_failover_slots
pg_failover_slots
Modul pg_failover_slots vylepšuje Azure Database for PostgreSQL při provozu na serverech, které mají povolenou jak logickou replikaci, tak vysokou dostupnost. Efektivně řeší výzvu v rámci standardního modulu PostgreSQL, který po převzetí služeb při selhání nezachovává sloty logické replikace. Udržování těchto slotů je důležité, aby se zabránilo pozastavení replikace nebo neshodě dat během změn role primárního serveru, což zajišťuje provozní kontinuitu a integritu dat.
Rozšíření zjednodušuje proces převzetí služeb při selhání tím, že spravuje potřebné přenosy, vyčištění a synchronizaci slotů replikace, a tím zajišťuje bezproblémový přechod během změn role serveru.
Další informace a pokyny k použití pg_failover_slots modulu najdete na stránce GitHubu.
Pokud chcete modul pg_failover_slots použít, ujistěte se, že byla jeho knihovna načtena při spuštění serveru.