Condividi tramite


Considerazioni sull'uso di estensioni e moduli

Questo articolo descrive alcune considerazioni speciali da tenere presenti quando si usano determinate estensioni o moduli in un'istanza del server flessibile di Database di Azure per PostgreSQL.

Considerazioni generiche con le estensioni

Per usare un'estensione nell'istanza del server flessibile di Database di Azure per PostgreSQL, è necessario:

  • Consenti estensione. Se l'estensione non è consentita, qualsiasi tentativo di eseguire CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION o COMMENT ON EXTENSION non riesce con un errore che indica che l'estensione di riferimento non è consentita.
  • Se l'estensione distribuisce una libreria binaria condivisa che richiede l'allocazione e l'accesso alla memoria condivisa e deve essere caricata all'avvio del server, è necessario seguire anche le istruzioni fornite nelle librerie di caricamento.
  • Creare l'estensione nei database in cui si vuole che l'estensione distribuisca gli oggetti SQL distribuiti con tale estensione.
  • Eliminare l'estensione. Quando si desidera rimuovere dal database in cui si esegue il comando tutti gli oggetti SQL distribuiti da tale estensione.
  • Aggiornare le estensioni per eseguire l'aggiornamento alla versione più recente di tutti gli artefatti SQL distribuiti da un'estensione già installata.
  • Visualizzare le estensioni installate e le versioni corrispondenti.

Se si verifica un errore durante l'esecuzione dei comandi CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION o COMMENT ON EXTENSION nell'istanza del server flessibile di Database di Azure per PostgreSQL, consultare l'elenco dei possibili errori e quale potrebbe essere la causa di ciascuno di essi.

Considerazioni generiche con i moduli

Per usare un modulo nell'istanza del server flessibile di Database di Azure per PostgreSQL, è necessario aggiungerlo solo al parametro del shared_preload_libraries server, come descritto in Librerie di caricamento.

Non è necessario che i moduli siano inseriti nella lista di autorizzazione. Si tratta di un requisito esclusivo per le estensioni.

Estensioni con considerazioni specifiche

L'elenco seguente enumera tutte le estensioni supportate che richiedono considerazioni specifiche quando vengono usate in un'istanza del server flessibile di Database di Azure per PostgreSQL:

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

AGE

L'estensione Apache AGE è un'estensione del grafo per PostgreSQL supportata da Database di Azure per PostgreSQL. Offre funzionalità di database a grafo, supporto di query a crittografia aperta e possibilità di eseguire query complesse sui dati del grafo archiviati in PostgreSQL. 'Apache AGE' è un progetto open source rilasciato con la licenza Apache 2.0.

Installare AGE

Per usare AGE, assicurarsi di dover inserire nella lista consentiti l'estensione, caricare la libreria e installare l'estensione nel database in cui si prevede di usare la relativa funzionalità.

L'estensione dblink consente di connettersi da un'istanza del server flessibile di Database di Azure per PostgreSQL a un altro o a un altro database nello stesso server. Database di Azure per PostgreSQL supporta connessioni sia in ingresso che in uscita a qualsiasi server PostgreSQL. Il server di invio deve consentire le connessioni in uscita al server ricevente. Analogamente, il server ricevente deve consentire le connessioni dal server di invio.

Se si prevede di usare questa estensione, è consigliabile distribuire i server con l'integrazione della rete virtuale. Per impostazione predefinita, l'integrazione della rete virtuale consente le connessioni tra server nella rete virtuale. È anche possibile scegliere di usare i gruppi di sicurezza di rete virtuale per personalizzare l'accesso.

pg_buffercache

L'estensione pg_buffercache può essere usata per studiare il contenuto di shared_buffers. Usando questa estensione, è possibile stabilire se una determinata relazione viene memorizzata nella cache (in shared_buffers). Questa estensione consente di risolvere i problemi di prestazioni (problemi di prestazioni correlati alla memorizzazione nella cache).

Questa estensione è integrata con l'installazione principale di PostgreSQL ed è facile da installare.

CREATE EXTENSION pg_buffercache;

pg_cron

L'estensione pg_cron è un'utilità di pianificazione dei processi semplice basata su cron per PostgreSQL che viene eseguita all'interno del database come estensione. L'estensione pg_cron può eseguire attività di manutenzione pianificata all'interno di un database PostgreSQL. Ad esempio, è possibile eseguire un vuoto periodico di una tabella o rimuovere processi di dati obsoleti.

L'estensione pg_cron può eseguire più processi in parallelo, ma viene eseguita al massimo un'istanza di un processo alla volta. Se si prevede che una seconda esecuzione venga avviata prima del completamento del primo, la seconda esecuzione viene accodata e avviata non appena viene completata la prima esecuzione. In questo modo, garantisce che i processi vengano eseguiti esattamente tutte le volte che sono pianificati e non vengano eseguiti simultaneamente con se stessi.

Assicurarsi che il valore su cui shared_preload_libraries è impostato includa pg_cron. Questa estensione non supporta il caricamento della libreria come effetto dell'esecuzione di CREATE EXTENSION. Qualsiasi tentativo di eseguire CREA ESTENSIONE se l'estensione non è stata aggiunta a shared_preload_libraries, o se il server non è stato riavviato dopo l'aggiunta, genera un errore il cui testo indica pg_cron can only be loaded via shared_preload_libraries e il cui hint è Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.

Per usare pg_cron, assicurarsi di caricare la libreria condivisa all'avvio del server, che sia consentita e installata in qualsiasi database da cui si vuole interagire con le relative funzionalità, usando gli artefatti SQL creati.

Examples

  1. Per eliminare i vecchi dati il sabato alle 3:30 (GMT).

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. Per eseguire il vuoto ogni giorno alle 10:00 (GMT) nel database postgrespredefinito.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. Per annullare la configurazione di tutte le attività da pg_cron.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Per visualizzare tutti i processi attualmente pianificati con pg_cron.

    SELECT * FROM cron.job;
    
  5. Per eseguire il vuoto ogni giorno alle 10:00 (GMT) nel database test cron con l'account del ruolo azure_pg_admin.

    SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
    

Altri esempi

A partire da pg_cron versione 1.4, è possibile usare le funzioni cron.schedule_in_database e cron.alter_job per pianificare il processo in un database specifico e aggiornare rispettivamente una pianificazione esistente.

La funzione cron_schedule_in_database consente il nome utente come parametro facoltativo. L'impostazione del nome utente su un valore non Null richiede privilegi avanzati di PostgreSQL e non è supportata per un'istanza del server flessibile di Database di Azure per PostgreSQL. Gli esempi precedenti mostrano l'esecuzione di questa funzione con un parametro facoltativo di nome utente omesso o impostato su Null, che esegue il processo nel contesto della pianificazione utente del processo, che deve avere azure_pg_admin privilegi di ruolo.

  1. Per eliminare i vecchi dati il sabato alle 3:30 (GMT) sul database DBName.

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. Per aggiornare o modificare il nome del database per la pianificazione esistente

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

pg_hint_plan

L'estensione pg_hint_plan consente di modificare i piani di esecuzione di PostgreSQL usando i cosiddetti "hint" nei commenti SQL, ad esempio:

/*+ SeqScan(a) */

L'estensione pg_hint_plan legge frasi di hint in un commento del modulo speciale specificato con l'istruzione SQL di destinazione. La forma specifica inizia con la sequenza di caratteri "/*+" e termina con "*/". Le frasi hint sono costituite da nomi di hint e dai parametri seguenti racchiusi tra parentesi e delimitati da spazi. Le nuove righe per la leggibilità possono delimitare ogni frase di hint.

Example:

/*+
 HashJoin(a b)
 SeqScan(a)
 */
    SELECT *
    FROM pgbench_branches b
    JOIN pgbench_accounts an ON b.bid = a.bid
    ORDER BY a.aid;

L'esempio precedente fa in modo che l'utilità di pianificazione usi i risultati di un seqscan nella tabella a da combinare con la tabella b come hashjoin.

Per usare l'estensione pg_hint_plan, assicurati di inserire l'estensione nella lista dei permessi, caricarne la libreria e installare l'estensione nel database in cui si prevede di usare le sue funzionalità.

pg_prewarm

L'estensione pg_prewarm carica i dati relazionali nella cache. Il preriscaldamento delle cache significa che le query hanno tempi di risposta migliori alla prima esecuzione dopo un riavvio. La funzionalità di preparazione automatica per PostgreSQL non è attualmente disponibile nel Database di Azure.

pg_repack

La prima volta che gli utenti dell'estensione pg_repack pongono in genere la domanda seguente: pg_repack è un'estensione o un eseguibile lato client come psql o pg_dump?

pg_repack è in realtà entrambi. pg_repack/lib include il codice per l'estensione, inclusi lo schema e gli artefatti SQL creati e la libreria C che implementa il codice di diverse di queste funzioni.

D'altra parte, pg_repack/bin ha il codice per l'applicazione client, che sa come interagire con gli elementi di programmabilità implementati nell'estensione. Questa applicazione client mira a semplificare la complessità dell'interazione con le diverse interfacce rilevate dall'estensione lato server. Offre all'utente alcune opzioni della riga di comando che sono più facili da comprendere. L'applicazione client è inutile senza l'estensione creata nel database a cui punta. L'estensione lato server autonomamente sarebbe completamente funzionale, ma richiederebbe all'utente di comprendere un modello di interazione complicato. Tale modello consiste nell'eseguire query per recuperare i dati usati come input per le funzioni implementate dall'estensione e così via.

Autorizzazione negata per la ricompressione dello schema

Attualmente, poiché si concedono autorizzazioni allo schema di repack creato da questa estensione, è supportata solo la funzionalità in esecuzione pg_repack dal contesto di azure_pg_admin.

È possibile notare che se il proprietario di una tabella, che non è azure_pg_admin, tenta di eseguire pg_repack, viene visualizzato l'errore seguente:

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()

Per evitare questo errore, eseguire pg_repack dal contesto di azure_pg_admin.

pg_stat_statements

L'estensione pg_stat_statements offre una visualizzazione di tutte le query eseguite nel database. Queste informazioni sono utili per comprendere le prestazioni del carico di lavoro delle query in un sistema di produzione.

L'estensione pg_stat_statements viene precaricata in shared_preload_libraries in ogni istanza del server flessibile di Database di Azure per PostgreSQL per fornire un mezzo per tenere traccia delle statistiche di esecuzione delle istruzioni SQL.

Per motivi di sicurezza, è necessario consentire l'estensionepg_stat_statements e installarla usando il comando CREATE EXTENSION .

L'impostazione pg_stat_statements.track, che controlla quali istruzioni vengono rilevate dalle tracce dell'estensione, impostata su top. Ciò consente di rilevare tutte le istruzioni eseguite direttamente dai client. Gli altri due livelli di rilevamento sono none e all. Questa impostazione è configurabile come parametro del server.

Esiste un compromesso tra le informazioni sull'esecuzione delle query fornite dall'estensione pg_stat_statements sulle prestazioni del server durante la registrazione di ogni istruzione SQL. Se non si usa attivamente l'estensione pg_stat_statements, è consigliabile impostare pg_stat_statements.track su none. Alcuni servizi di monitoraggio di terze parti potrebbero basarsi su pg_stat_statements per fornire informazioni dettagliate sulle prestazioni delle query, quindi verificare se si tratta del caso.

postgres_fdw

L'estensione postgres_fdw consente di connettersi da un'istanza del server flessibile di Database di Azure per PostgreSQL a un altro o a un altro database nello stesso server. Database di Azure per PostgreSQL supporta connessioni sia in ingresso che in uscita a qualsiasi server PostgreSQL. Il server di invio deve consentire le connessioni in uscita al server ricevente. Analogamente, il server ricevente deve consentire le connessioni dal server di invio.

Se si prevede di usare questa estensione, è consigliabile distribuire i server con l'integrazione della rete virtuale. Per impostazione predefinita, l'integrazione della rete virtuale consente le connessioni tra server nella rete virtuale. È anche possibile scegliere di usare i gruppi di sicurezza di rete virtuale per personalizzare l'accesso.

pgstattuple

Quando si usa l'estensione pgstattuple per provare a ottenere statistiche di tupla da oggetti mantenuti nello schema pg_toast nelle versioni da Postgres 11 a 13, viene visualizzato un errore "autorizzazione negata per lo schema pg_toast".

Autorizzazione negata per la pg_toast dello schema

I clienti che usano PostgreSQL versioni da 11 a 13 nell'istanza del server flessibile di Database di Azure per PostgreSQL non possono usare l'estensione pgstattuple per gli oggetti all'interno dello pg_toast schema.

In PostgreSQL 16 e 17, il ruolo pg_read_all_data viene concesso automaticamente a azure_pg_admin, consentendo a pgstattuple di funzionare correttamente. In PostgreSQL 14 e 15 i clienti possono concedere manualmente il ruolo pg_read_all_data a azure_pg_admin per ottenere lo stesso risultato. Tuttavia, in PostgreSQL da 11 a 13, il ruolo pg_read_all_data non esiste.

I clienti non possono concedere direttamente le autorizzazioni necessarie. Se è necessario essere in grado di eseguire pgstattuple per accedere agli oggetti nello schema pg_toast, procedere con la creazione di una richiesta di supporto di Azure.

timescaleDB

L'estensione timescaleDB è un database time series in pacchetto come estensione per PostgreSQL. Offre funzioni analitiche orientate al tempo, ottimizzazioni e scalabilità di Postgres per carichi di lavoro di serie temporali. Altre informazioni su TimescaleDB, un marchio registrato di Timescale, Inc. Database di Azure per PostgreSQL offre l'edizione TimescaleDB Apache-2.

Installare TimescaleDB

Per usare timescaleDB, assicurati di aggiungere alla lista consentita l'estensione, caricarne la libreria e installare l'estensione nel database in cui intendi usarne le funzionalità.

È ora possibile creare un'hypertable TimescaleDB da zero o eseguire la migrazione dei dati delle serie temporali esistenti in PostgreSQL.

Per altre informazioni sul ripristino di un database di scala cronologica con pg_dump e pg_restore, vedere la documentazione relativa alla scalabilità cronologica.

Ripristino di un database di scalabilità temporale usando timescaledb-backup

Durante l'esecuzione della procedura SELECT timescaledb_post_restore(), è possibile che vengano negate le autorizzazioni durante l'aggiornamento del flag timescaledb.restore. Il motivo per cui viene visualizzato questo errore è dovuto all'autorizzazione ALTER DATABASE limitata nei servizi di database PaaS cloud. In questo caso, è possibile eseguire un metodo alternativo usando lo strumento timescaledb-backup per eseguire il backup e il ripristino del database di scala cronologica. Timescaledb-backup è un programma che rende il dump e il ripristino di un database TimescaleDB più semplice, meno soggetto a errori e prestazioni più elevate.

A questo scopo, attenersi alla procedura seguente:

  1. Installare gli strumenti come descritto qui.

  2. Creare un'istanza e un database flessibili del server flessibile di Database di Azure per PostgreSQL di destinazione.

  3. Abilitare l'estensione Scala cronologica.

  4. Concedere il azure_pg_admin ruolo all'utente utilizzato da ts-restore.

  5. Eseguire ts-restore per ripristinare il database.

Altre informazioni su queste utilità sono disponibili qui.

Estensioni e aggiornamento della versione principale

Database di Azure per PostgreSQL offre una funzionalità di aggiornamento della versione principale in loco che esegue un aggiornamento in loco dell'istanza del server flessibile di Database di Azure per PostgreSQL, richiedendo solo una semplice interazione da parte dell'utente. L'aggiornamento della versione principale sul posto semplifica il processo di aggiornamento di Database di Azure per PostgreSQL, riducendo al minimo l'interruzione per utenti e applicazioni che accedono al server. Gli aggiornamenti delle versioni principali sul posto non supportano estensioni specifiche e esistono alcune limitazioni per l'aggiornamento di determinate estensioni.

Le estensioni anon, Apache AGE, dblink, orafce, postgres_fdw, e timescaledb non sono supportate per tutte le versioni del server flessibile di Azure Database per PostgreSQL quando si usa la funzionalità di aggiornamento in loco della versione principale.

Moduli con considerazioni specifiche

L'elenco seguente enumera tutti i moduli supportati che richiedono considerazioni specifiche quando vengono usati in un'istanza del server flessibile di Database di Azure per PostgreSQL:

  • pg_failover_slots

pg_failover_slots

Il modulo pg_failover_slots migliora Database di Azure per PostgreSQL quando si usa sia la replica logica sia i server con disponibilità elevata. Risolve in modo efficace la sfida all'interno del motore PostgreSQL standard che non mantiene gli slot di replica logica dopo un failover. La gestione di questi slot è fondamentale per impedire le pause di replica o le mancate corrispondenze dei dati durante le modifiche del ruolo del server primario, garantendo la continuità operativa e l'integrità dei dati.

L'estensione semplifica il processo di failover gestendo il trasferimento, la pulizia e la sincronizzazione necessari degli slot di replica, offrendo così una transizione senza problemi durante le modifiche del ruolo del server.

Altre informazioni e istruzioni sull'uso del modulo sono disponibili nella pg_failover_slotsrelativa pagina GitHub.

Per usare il pg_failover_slots modulo, assicurarsi che la relativa libreria sia stata caricata all'avvio del server.