Delen via


Overwegingen bij het gebruik van extensies en modules

In dit artikel worden enkele speciale overwegingen beschreven waarmee u rekening moet houden bij het gebruik van bepaalde extensies of modules in een flexibele Azure Database for PostgreSQL-server.

Algemene overwegingen met extensies

Als u een extensie wilt gebruiken in uw flexibele Azure Database for PostgreSQL-server, moet u het volgende doen:

  • Extensie toestaan. Als de extensie niet is toegestaan, mislukt een poging om uit te voerenCREATE EXTENSION, ALTER EXTENSIONDROP EXTENSIONof COMMENT ON EXTENSION mislukt met een fout die aangeeft dat de bedoelde extensie niet is toegestaan.
  • Als de extensie een gedeelde binaire bibliotheek implementeert waarvoor gedeeld geheugen moet worden toegewezen en geopend en moet worden geladen wanneer de server wordt gestart, moet u ook de instructies volgen in de laadbibliotheken.
  • Maak een extensie in de databases waarin u wilt dat de extensie de SQL-objecten implementeert die met die extensie worden gedistribueerd.
  • Verwijder de extensie. Wanneer u wilt verwijderen uit de database waarin u de opdracht uitvoert, worden alle SQL-objecten die door die extensie worden gedistribueerd, uitgevoerd.
  • Werk extensies bij om bij te werken naar de nieuwste versie van alle SQL-artefacten die zijn geïmplementeerd door een extensie die al is geïnstalleerd.
  • Geïnstalleerde extensies en de bijbehorende versies weergeven.

Als er een fout optreedt tijdens het uitvoeren van de CREATE EXTENSION, ALTER EXTENSIONDROP EXTENSION of COMMENT ON EXTENSION opdrachten op uw flexibele Azure Database for PostgreSQL-server, raadpleegt u de lijst met mogelijke fouten en wat de oorzaak van elk van deze fouten kan zijn.

Algemene overwegingen met modules

Als u een module in uw flexibele Azure Database for PostgreSQL-server wilt gebruiken, hoeft u deze alleen toe te voegen aan de shared_preload_libraries serverparameter, zoals beschreven in laadbibliotheken.

Modules hoeven niet te worden toegestaan. Dat is een exclusieve vereiste voor extensies.

Extensies met specifieke overwegingen

In de volgende lijst worden alle ondersteunde extensies opgesomd waarvoor specifieke overwegingen nodig zijn bij gebruik in een flexibele Azure Database for PostgreSQL-server:

  • dblink
  • pg_buffercache
  • pg_cron
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • postgres_fdw
  • pgstattuple

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_librariesen waarvan de hint is Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.

Als u deze wilt gebruiken pg_cron, moet u ervoor zorgen dat u de gedeelde bibliotheek laadt 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 ervan, met behulp van de SQL-artefacten die worden gemaakt.

Voorbeelden

  1. 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'$$);
    
  2. Als u de vacuüm elke dag om 10:00 uur (GMT) wilt uitvoeren in de standaarddatabase postgres.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. Als u alle taken van pg_cron.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Als u alle taken wilt zien die momenteel zijn gepland met pg_cron.

    SELECT * FROM cron.job;
    
  5. Als u de vacuüm elke dag om 10:00 uur (GMT) wilt uitvoeren in de database test cron onder het azure_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 .

  1. 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');
    
  2. De databasenaam voor bestaande schema bijwerken of wijzigen

    SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
    

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 ziet u dat als de eigenaar van een tabel, die niet azure_pg_adminis, probeert uit te voeren pg_repack, de volgende fout krijgt:

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. Deze informatie 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 door de extensie worden bijgehouden, standaard topingesteld, 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 nonestellenpg_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.

Zie de documentatie van Timescale voor meer informatie over het herstellen van een Timescale-database.pg_restorepg_dump

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. De reden waarom u deze fout krijgt, is vanwege de beperkte ALTER DATABASE-machtiging 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:

  1. Installeer hulpprogramma's zoals hier wordt beschreven.

  2. Maak een azure Database for PostgreSQL Flexible Server-exemplaar en -database als doel.

  3. Schakel de timescale-extensie in.

  4. Verdeel de azure_pg_admin rol aan de gebruiker die wordt gebruikt door ts-restore.

  5. 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 serverexemplaren van Azure Database for PostgreSQL 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, pgauditen postgres_fdwtimescaledb worden niet ondersteund voor alle flexibele serverversies van Azure Database for PostgreSQL wanneer u de functie voor in-place primaire versie-update gebruikt.

Modules met specifieke overwegingen

In de volgende lijst worden alle ondersteunde modules opgesomd waarvoor specifieke overwegingen nodig zijn bij gebruik in een flexibele Azure Database for PostgreSQL-server:

  • pg_failover_slots

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.