Aspekty rozšíření specifické pro flexibilní server Azure Database for PostgreSQL
Tento článek popisuje některé zvláštní aspekty, o nichž musíte vědět při používání určitých rozšíření v instanci flexibilního serveru Azure Database for PostgreSQL.
Požadavky
Přečtěte si článek o používání rozšíření PostgreSQL pro Azure Database for PostgreSQL a zjistěte, jak:
- Povolení rozšíření na flexibilním serveru Azure Database for PostgreSQL
- Načtěte knihovny rozšíření, která nasazují binární knihovny, které vyžadují přidělení sdílené paměti a přístup ke sdílené paměti a je třeba je načíst při spuštění serveru.
- Nainstalujte rozšíření do některé databáze, aby objekty SQL zabalené v tomto rozšíření byly nasazeny v této databázi a mohly být přístupné v jeho kontextu.
- Odstraňte rozšíření z určité databáze, aby se z této databáze odebraly objekty SQL zabalené v daném rozšíření.
- Aktualizujte artefakty SQL nasazené rozšířením, které už je nainstalované.
- Zobrazení nainstalovaných rozšíření a jejich odpovídajících verzí
- Zjistěte, jaké možné chyby můžete získat při správě rozšíření na flexibilním serveru Azure Database for PostgreSQL a co může být příčinou každého z nich.
Rozšíření
Následující seznam obsahuje výčet všech podporovaných rozšíření, která vyžadují konkrétní aspekty při použití ve službě flexibilního serveru Azure Database for PostgreSQL:
dblink
pg_buffercache
pg_cron
pg_failover_slots
pg_hint_plan
pg_prewarm
pg_repack
pg_stat_statements
postgres_fdw
pgstattuple
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. Flexibilní server 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_libraries
server 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 je knihovna přidaná k načtení při spuštění serveru, je povolená a je nainstalovaná v jakékoli databázi, ze které chcete pracovat s jeho funkcemi, pomocí artefaktů SQL, které vytvoří.
Příklady
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 cron
pod účtem role spustit úklid každý den v 10:00 (GMT).azure_pg_admin
SELECT 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 hodnotu bez hodnoty null vyžaduje oprávnění superuživatele PostgreSQL a na flexibilním serveru Azure Database for PostgreSQL se nepodporuje. 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_failover_slots
Rozšíření pg_failover_slots
vylepšuje flexibilní server Azure Database for PostgreSQL při provozu s logickou replikací i servery s povolenou 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
rozšíření najdete na stránce GitHubu.
Pokud chcete rozšíření použít pg_failover_slots
, ujistěte se, že se jeho knihovna načetla při spuštění serveru.
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.
Příklad:
/*+
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žítpg_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ředwarmu flexibilního serveru 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 knihovny jazyka C implementují kód několika těchto funkcí.
Na druhou stranu pg_repack/bin obsahuje kód klientské aplikace, který ví, jak pracovat s elementy programovatelnosti implementovanými 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 chybou, jako je následující:
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. To je užitečné pro pochopení výkonu úloh dotazů v produkčním systému.
Rozšíření pg_stat_statements se předem načte na shared_preload_libraries
každou instanci flexibilního serveru Azure Database for PostgreSQL, aby poskytovalo způsob 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í, jaké příkazy jsou sledovány rozšířením, výchozí nastavení , což znamená, že všechny příkazy top
vydané 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. Flexibilní server 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 používající PostgreSQL verze 11 až 13 ve službě Azure Database for Flexibilní server nemůžou pgstattuple
rozšíření použít 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 sadě TimescaleDB, registrovanou ochrannou známku flexibilního serveru Timescale, Inc. Azure Database for PostgreSQL poskytuje edici TimescaleDB Apache-2.
Instalace 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.
Obnovení databáze časové osy pomocí pg_dump a pg_restore
Chcete-li obnovit databázi časové osy pomocí pg_dump
a pg_restore
, je nutné spustit dva pomocné procedury v cílové databázi: timescaledb_pre_restore()
a timescaledb_post restore()
.
Nejprve připravte cílovou databázi:
--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();
Nyní můžete spustit pg_dump
v původní databázi a pak provést pg_restore
. Po obnovení nezapomeňte v obnovené databázi spustit následující příkaz:
SELECT timescaledb_post_restore();
Další informace o metodě obnovení s povolenou databází s povolenou časovou osou najdete v dokumentaci k časovému měřítku.
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. Důvodem 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_admin
Udě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
Flexibilní server 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 s jednoduchou interakcí od uživatele. Místní upgrade hlavní verze zjednodušuje proces upgradu flexibilního serveru 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 AGE
dblink
, orafce
, pgaudit
, postgres_fdw
a timescaledb
nejsou podporovány pro všechny verze flexibilního serveru Azure Database for PostgreSQL při použití místní funkce aktualizace hlavní verze.