Overwegingen voor extensies die specifiek zijn voor Azure Database for PostgreSQL - Flexibele server
In dit artikel worden enkele speciale overwegingen beschreven waarmee u rekening moet houden bij het gebruik van bepaalde extensies in een exemplaar van flexibele Azure Database for PostgreSQL-server.
Vereisten
Lees het artikel over het gebruik van PostgreSQL-extensies voor Azure Database for PostgreSQL voor meer informatie over het volgende:
- Allowlist-extensies in Azure Database for PostgreSQL Flexible Server
- Laad de bibliotheken van extensies waarmee binaire bibliotheken worden geïmplementeerd. Hiervoor moet gedeeld geheugen worden toegewezen en geopend en moeten worden geladen wanneer de server wordt gestart.
- Installeer extensies in een bepaalde database, zodat de SQL-objecten die in die extensie zijn verpakt, in die database worden geïmplementeerd en in de context kunnen worden geopend.
- Verwijder extensies uit een bepaalde database, zodat de SQL-objecten die in die extensie zijn verpakt, uit die database worden verwijderd.
- Werk de SQL-artefacten bij die zijn geïmplementeerd door een extensie die al is geïnstalleerd.
- Bekijk welke extensies zijn geïnstalleerd en de bijbehorende versies.
- Lees wat de mogelijke fouten zijn die u kunt ontvangen bij het beheren van extensies in Azure Database for PostgreSQL Flexible Server en wat de oorzaak hiervan kan zijn.
Uitbreidingen
In de volgende lijst worden alle ondersteunde extensies opgesomd waarvoor specifieke overwegingen nodig zijn bij gebruik in de flexibele serverservice van 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
Met de dblink
extensie kunt u verbinding maken vanaf één exemplaar van azure Database for PostgreSQL flexibele server naar een andere of een andere database op dezelfde server. Flexibele Azure Database for PostgreSQL-server ondersteunt zowel binnenkomende als uitgaande verbindingen met elke PostgreSQL-server. De verzendende server moet uitgaande verbindingen met de ontvangende server toestaan. Op dezelfde manier moet de ontvangende server verbindingen van de verzendende server toestaan.
Als u van plan bent deze extensie te gebruiken, raden we u aan uw servers te implementeren met integratie van virtuele netwerken. Integratie van virtuele netwerken staat standaard verbindingen toe tussen servers in het virtuele netwerk. U kunt er ook voor kiezen om netwerkbeveiligingsgroepen voor virtuele netwerken te gebruiken om de toegang aan te passen.
pg_buffercache
De pg_buffercache
extensie kan worden gebruikt om de inhoud van shared_buffers te bestuderen. Met deze extensie kunt u zien of een bepaalde relatie in de cache is opgeslagen (in shared_buffers
). Deze extensie kan u helpen bij het oplossen van prestatieproblemen (prestatieproblemen in cache).
Deze extensie is geïntegreerd met de kerninstallatie van PostgreSQL en is eenvoudig te installeren.
CREATE EXTENSION pg_buffercache;
pg_cron
De pg_cron
extensie is een eenvoudige, cron-gebaseerde taakplanner voor PostgreSQL die als extensie in de database wordt uitgevoerd. De pg_cron
extensie kan geplande onderhoudstaken uitvoeren in een PostgreSQL-database. U kunt bijvoorbeeld een periodiek vacuüm van een tabel uitvoeren of oude gegevenstaken verwijderen.
De pg_cron
extensie kan meerdere taken parallel uitvoeren, maar wordt maximaal één exemplaar van een taak tegelijk uitgevoerd. Als een tweede uitvoering moet beginnen voordat de eerste is voltooid, wordt de tweede uitvoering in de wachtrij geplaatst en gestart zodra de eerste uitvoering is voltooid. Op een dergelijke manier zorgt het ervoor dat taken precies zo vaak worden uitgevoerd als gepland en niet gelijktijdig met zichzelf worden uitgevoerd.
Zorg ervoor dat de waarde waarop shared_preload_libraries
is ingesteld, bevat pg_cron
. Deze extensie biedt geen ondersteuning voor het laden van de bibliotheek als het effect van het uitvoeren van CREATE EXTENSION. Elke poging om CREATE EXTENSION uit te voeren als de extensie niet is toegevoegd aan shared_preload_libraries
, of de server niet opnieuw is opgestart nadat deze is toegevoegd, resulteert in een fout waarvan de tekst zegt pg_cron can only be loaded via shared_preload_libraries
en waarvan de hint is Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf
.
Als u deze wilt gebruikenpg_cron
, controleert u of de bibliotheek wordt toegevoegd om te worden geladen bij het starten van de server, wordt deze op de acceptatielijst geplaatst en geïnstalleerd in elke database waaruit u wilt communiceren met de functionaliteit, met behulp van de SQL-artefacten die worden gemaakt.
Voorbeelden
Oude gegevens op zaterdag om 3:30 uur (GMT) verwijderen.
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
Als u de vacuüm elke dag om 10:00 uur (GMT) wilt uitvoeren in de standaarddatabase
postgres
.SELECT cron.schedule('0 10 * * *', 'VACUUM');
Als u alle taken van
pg_cron
.SELECT cron.unschedule(jobid) FROM cron.job;
Als u alle taken wilt zien die momenteel zijn gepland met
pg_cron
.SELECT * FROM cron.job;
Als u de vacuüm elke dag om 10:00 uur (GMT) wilt uitvoeren in de database
test cron
onder hetazure_pg_admin
rolaccount.SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
Meer voorbeelden
pg_cron
Vanaf versie 1.4 kunt u de cron.schedule_in_database
en cron.alter_job
functies gebruiken om uw taak in een specifieke database te plannen en een bestaand schema bij te werken.
De cron_schedule_in_database
functie staat de gebruikersnaam toe als een optionele parameter. Voor het instellen van de gebruikersnaam op een niet-null-waarde is postgreSQL-superuser-bevoegdheid vereist en wordt deze niet ondersteund in azure Database for PostgreSQL Flexibele server. In voorgaande voorbeelden ziet u hoe u deze functie uitvoert met een optionele gebruikersnaamparameter die is weggelaten of ingesteld op null, waarmee de taak wordt uitgevoerd in de context van de gebruiker die de taak plant, die rolbevoegdheden moet hebben azure_pg_admin
.
Oude gegevens verwijderen op zaterdag om 3:30 uur (GMT) op database DBName.
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
De databasenaam voor bestaande schema bijwerken of wijzigen
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_failover_slots
De pg_failover_slots
extensie verbetert de flexibele Azure Database for PostgreSQL-server wanneer u werkt met zowel logische replicatie als servers met hoge beschikbaarheid. Het lost effectief de uitdaging op binnen de standaard PostgreSQL-engine die na een failover geen logische replicatiesites behoudt. Het onderhouden van deze sites is essentieel om te voorkomen dat replicatie wordt onderbroken of gegevens niet overeenkomen tijdens wijzigingen in de primaire serverfunctie, waardoor operationele continuïteit en gegevensintegriteit worden gewaarborgd.
De extensie stroomlijnt het failoverproces door de benodigde overdracht, opschoning en synchronisatie van replicatiesites te beheren, waardoor een naadloze overgang wordt geboden tijdens wijzigingen in de serverfunctie.
U vindt meer informatie en instructies over het gebruik van de extensie op de pg_failover_slots
GitHub-pagina.
Als u de extensie wilt gebruiken, moet u ervoor zorgen dat de pg_failover_slots
bibliotheek is geladen toen de server werd gestart.
pg_hint_plan
Met de pg_hint_plan
extensie kunt u PostgreSQL-uitvoeringsplannen aanpassen met behulp van zogenaamde 'hints' in SQL-opmerkingen, zoals:
/*+ SeqScan(a) */
De pg_hint_plan
extensie leest hints in een opmerking van de speciale vorm die is opgegeven met de SQL-doelinstructie. Het specifieke formulier begint met de tekenreeks "/*+" en eindigt met "*/". Hintzinnen bestaan uit hintnamen en de volgende parameters tussen haakjes en gescheiden door spaties. Nieuwe regels voor leesbaarheid kunnen elke hintterm scheiden.
Voorbeeld:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
In het vorige voorbeeld wordt de planner gebruikt om de resultaten van een seqscan
tabel a
te combineren met een tabel b
als een hashjoin
.
Als u de extensie wilt gebruiken pg_hint_plan
, moet u ervoor zorgen dat u de extensie toestaat , de bibliotheek laadt en de extensie installeert in de database waarop u de functionaliteit wilt gebruiken.
pg_prewarm
De pg_prewarm
extensie laadt relationele gegevens in de cache. Het voorafwarmen van uw caches betekent dat uw query's betere reactietijden hebben bij hun eerste uitvoering na een herstart. De functionaliteit voor automatisch aanvullen voor de flexibele PostgreSQL-server is momenteel niet beschikbaar in de Azure Database.
pg_repack
De eerste keer dat gebruikers van de pg_repack
extensie doorgaans de volgende vraag stellen: Is pg_repack
een extensie of een uitvoerbaar bestand aan de clientzijde, zoals psql
of pg_dump
?
pg_repack is eigenlijk beide. pg_repack/lib heeft de code voor de extensie, met inbegrip van het schema en SQL-artefacten dat wordt gemaakt, en de C-bibliotheek die de code van verschillende van deze functies implementeert.
Aan de andere kant heeft pg_repack/bin de code voor de clienttoepassing, die weet hoe moet worden gecommuniceerd met de programmeerelementen die in de extensie zijn geïmplementeerd. Deze clienttoepassing is erop gericht om de complexiteit van interactie met de verschillende interfaces die worden weergegeven door de extensie aan de serverzijde te vereenvoudigen. Het biedt de gebruiker een aantal opdrachtregelopties die gemakkelijker te begrijpen zijn. De clienttoepassing is nutteloos zonder de extensie die is gemaakt in de database waarnaar deze verwijst. De extensie aan de serverzijde zou volledig functioneel zijn, maar vereist dat de gebruiker een gecompliceerd interactiepatroon begrijpt. Dat patroon zou bestaan uit het uitvoeren van query's om gegevens op te halen die worden gebruikt als invoer voor functies die door de extensie zijn geïmplementeerd, enzovoort.
Machtiging geweigerd voor het opnieuw verpakken van schema's
Omdat we momenteel machtigingen verlenen aan het schema voor opnieuw verpakken dat door deze extensie is gemaakt, bieden we alleen ondersteuning voor het uitvoeren pg_repack
van functionaliteit vanuit de context van azure_pg_admin
.
Mogelijk merkt u dat als de eigenaar van een tabel, die dat niet azure_pg_admin
is, probeert uit te voeren pg_repack
, een fout krijgt die er als volgt uitziet:
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()
Voer pg_repack uit vanuit de context van azure_pg_admin
.
pg_stat_statements
De pg_stat_statements-extensie geeft u een overzicht van alle query's die in uw database worden uitgevoerd. Dit is handig om inzicht te krijgen in de prestaties van uw queryworkloads in een productiesysteem.
De pg_stat_statements-extensie wordt vooraf geladen shared_preload_libraries
op elk flexibele Azure Database for PostgreSQL-serverexemplaren om een middel te bieden voor het bijhouden van uitvoeringsstatistieken van SQL-instructies.
Om veiligheidsredenen moet u de pg_stat_statements-extensie toestaan en installeren met de opdracht CREATE EXTENSION.
De instelling pg_stat_statements.track
, waarmee wordt bepaald welke instructies worden bijgehouden door de extensie, standaard top
ingesteld op , wat betekent dat alle instructies die rechtstreeks door clients worden uitgegeven, worden bijgehouden. De twee andere traceringsniveaus zijn none
en all
. Deze instelling kan worden geconfigureerd als een serverparameter.
Er is een compromis tussen de queryuitvoeringsgegevens die de pg_stat_statements
extensie biedt voor de serverprestaties terwijl elke SQL-instructie wordt logboeken. Als u de pg_stat_statements
extensie niet actief gebruikt, raden we u aan deze optie in te none
stellenpg_stat_statements.track
. Sommige bewakingsservices van derden kunnen afhankelijk zijn van pg_stat_statements
het leveren van inzichten in queryprestaties, dus controleer of dit het geval is voor u.
postgres_fdw
Met de postgres_fdw
extensie kunt u verbinding maken vanaf één exemplaar van azure Database for PostgreSQL flexibele server naar een andere of een andere database op dezelfde server. Flexibele Azure Database for PostgreSQL-server ondersteunt zowel binnenkomende als uitgaande verbindingen met elke PostgreSQL-server. De verzendende server moet uitgaande verbindingen met de ontvangende server toestaan. Op dezelfde manier moet de ontvangende server verbindingen van de verzendende server toestaan.
Als u van plan bent deze extensie te gebruiken, raden we u aan uw servers te implementeren met integratie van virtuele netwerken. Integratie van virtuele netwerken staat standaard verbindingen toe tussen servers in het virtuele netwerk. U kunt er ook voor kiezen om netwerkbeveiligingsgroepen voor virtuele netwerken te gebruiken om de toegang aan te passen.
pgungsuple
Wanneer u de pgstattuple
extensie gebruikt om tuple-statistieken te verkrijgen van objecten die in het pg_toast
schema worden bewaard in versies van Postgres 11 tot en met 13, ontvangt u de foutmelding 'machtiging geweigerd voor schema-pg_toast'.
Machtiging geweigerd voor schema-pg_toast
Klanten die PostgreSQL-versies 11 tot en met 13 op Azure Database for Flexible Server gebruiken, kunnen de pgstattuple
extensie niet gebruiken voor objecten in het pg_toast
schema.
In PostgreSQL 16 en 17 wordt de pg_read_all_data
rol automatisch verleend aan azure_pg_admin
, zodat deze correct kan pgstattuple
functioneren. In PostgreSQL 14 en 15 kunnen klanten de pg_read_all_data
rol handmatig verlenen om hetzelfde resultaat te azure_pg_admin
bereiken. In PostgreSQL 11 tot en met 13 bestaat de pg_read_all_data
rol echter niet.
Klanten kunnen de benodigde machtigingen niet rechtstreeks verlenen. Als u toegang wilt krijgen pgstattuple
tot objecten onder het pg_toast
schema, gaat u verder met het maken van een ondersteuning voor Azure aanvraag.
timescaleDB
De timescaleDB
extensie is een tijdreeksdatabase die is verpakt als een extensie voor PostgreSQL. Het biedt tijdgeoriënteerde analytische functies en optimalisaties en schaalt Postgres voor tijdreeksworkloads.
Meer informatie over TimescaleDB, een geregistreerd handelsmerk van Timescale, Inc. Azure Database for PostgreSQL flexibele server biedt de TimescaleDB Apache-2-editie.
TimescaleDB installeren
Als u deze wilt gebruiken timescaleDB
, moet u ervoor zorgen dat u de extensie toestaat , de bibliotheek laadt en de extensie installeert in de database waarop u de functionaliteit wilt gebruiken.
U kunt nu een volledig nieuwe TimescaleDB-hypertabel maken of bestaande tijdreeksgegevens migreren in PostgreSQL.
Een Timescale-database herstellen met behulp van pg_dump en pg_restore
Als u een Timescale-database wilt herstellen met behulp van pg_dump
en pg_restore
, moet u twee helperprocedures uitvoeren in de doeldatabase: timescaledb_pre_restore()
en timescaledb_post restore()
.
Bereid eerst de doeldatabase voor:
--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();
U kunt nu uitvoeren pg_dump
op de oorspronkelijke database en vervolgens doen pg_restore
. Voer na het herstellen de volgende opdracht uit in de herstelde database:
SELECT timescaledb_post_restore();
Zie de documentatie over Timescale voor meer informatie over de herstelmethode met de database met Timescale.
Een Timescale-database herstellen met timescaledb-backup
Tijdens het uitvoeren van de SELECT timescaledb_post_restore()
procedure worden mogelijk machtigingen geweigerd bij het bijwerken van de vlag timescaledb.restore. Dit komt door beperkte ALTER DATABASE-machtigingen in Cloud PaaS-databaseservices. In dit geval kunt u een alternatieve methode uitvoeren met behulp van het timescaledb-backup
hulpprogramma om een back-up te maken van de Timescale-database en deze te herstellen. Timescaledb-backup is een programma dat dumpen en herstellen van een TimescaleDB-database eenvoudiger, minder foutgevoelig en beter presteert.
Dit doet u als volgt:
Installeer hulpprogramma's zoals hier wordt beschreven.
Maak een azure Database for PostgreSQL Flexible Server-exemplaar en -database als doel.
Schakel de timescale-extensie in.
Verdeel de
azure_pg_admin
rol aan de gebruiker die wordt gebruikt door ts-restore.Voer ts-restore uit om de database te herstellen.
Meer informatie over deze hulpprogramma's vindt u hier.
Extensies en upgrade van primaire versie
Azure Database for PostgreSQL Flexibele server biedt een in-place functie voor het upgraden van primaire versies, waarmee een in-place upgrade van het flexibele azure Database for PostgreSQL-serverexemplaren wordt uitgevoerd met slechts een eenvoudige interactie van de gebruiker. In-place primaire versie-upgrade vereenvoudigt het upgradeproces voor flexibele Azure Database for PostgreSQL-servers, waardoor de onderbreking voor gebruikers en toepassingen die toegang hebben tot de server, wordt geminimaliseerd. In-place primaire versie-upgrades bieden geen ondersteuning voor specifieke extensies en er zijn enkele beperkingen voor het upgraden van bepaalde extensies.
De extensiesanon
, Apache AGE
, dblink
, , orafce
, pgaudit
en postgres_fdw
timescaledb
worden niet ondersteund voor alle flexibele serverversies van Azure Database for PostgreSQL wanneer u de functie voor in-place primaire versie-update gebruikt.