Considerazioni sulle estensioni specifiche per Database di Azure per PostgreSQL - Server flessibile
Questo articolo descrive alcune considerazioni speciali da tenere presenti quando si usano determinate estensioni in un'istanza di Database di Azure per PostgreSQL server flessibile.
Prerequisiti
Leggere l'articolo come usare le estensioni PostgreSQL per Database di Azure per PostgreSQL per informazioni su come:
- Estensioni allowlist nel server flessibile Database di Azure per PostgreSQL
- Caricare le librerie di estensioni che distribuiscono librerie binarie, che richiedono l'allocazione e l'accesso alla memoria condivisa e devono essere caricate all'avvio del server.
- Installare le estensioni in un database, in modo che gli oggetti SQL inclusi in tale estensione vengano distribuiti nel database e accessibili nel relativo contesto.
- Eliminare le estensioni da un database, in modo che gli oggetti SQL inclusi in tale estensione vengano rimossi da tale database.
- Aggiornare gli artefatti SQL distribuiti da un'estensione già installata.
- Visualizzare le estensioni installate e le relative versioni corrispondenti.
- Informazioni sui possibili errori che è possibile ricevere quando si gestiscono le estensioni in Database di Azure per PostgreSQL server flessibile e quali potrebbero essere le cause di ognuna di esse.
Estensioni
L'elenco seguente enumera tutte le estensioni supportate che richiedono considerazioni specifiche quando vengono usate nel servizio server flessibile Database di Azure per PostgreSQL:
dblink
pg_buffercache
pg_cron
pg_failover_slots
pg_hint_plan
pg_prewarm
pg_repack
pg_stat_statements
postgres_fdw
pgstattuple
dblink
L'estensione dblink
consente di connettersi da un'istanza del server flessibile Database di Azure per PostgreSQL a un altro o a un altro database nello stesso server. Il server flessibile di 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 CREATE EXTENSION 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 che la libreria venga aggiunta per essere caricata all'avvio del server, sia consentita e installata in qualsiasi database da cui si vuole interagire con le relative funzionalità, usando gli artefatti SQL creati.
Esempi
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'$$);
Per eseguire il vuoto ogni giorno alle 10:00 (GMT) nel database
postgres
predefinito.SELECT cron.schedule('0 10 * * *', 'VACUUM');
Per annullare la configurazione di tutte le attività da
pg_cron
.SELECT cron.unschedule(jobid) FROM cron.job;
Per visualizzare tutti i processi attualmente pianificati con
pg_cron
.SELECT * FROM cron.job;
Per eseguire il vuoto ogni giorno alle 10:00 (GMT) nel database
test cron
con l'account delazure_pg_admin
ruolo.SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
Altri esempi
pg_cron
A partire dalla versione 1.4, è possibile usare le cron.schedule_in_database
funzioni e cron.alter_job
per pianificare il processo in un database specifico e aggiornare rispettivamente una pianificazione esistente.
La cron_schedule_in_database
funzione 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 in Database di Azure per PostgreSQL server flessibile. 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.
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');
Per aggiornare o modificare il nome del database per la pianificazione esistente
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_failover_slots
L'estensione pg_failover_slots
migliora Database di Azure per PostgreSQL server flessibile quando si utilizzano sia la replica logica che 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 dell'estensione sono disponibili nella pg_failover_slots
relativa pagina GitHub.
Per usare l'estensione, assicurarsi che la relativa libreria sia stata caricata all'avvio pg_failover_slots
del server.
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.
Esempio:
/*+
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 lo strumento di pianificazione usi i risultati di una seqscan
tabella a
da combinare con la tabella b
come .hashjoin
Per usare l'estensione pg_hint_plan
, assicurarsi di consentire l'elenco di estensioni, caricarne la libreria e installare l'estensione nel database in cui si prevede di usare la relativa funzionalità.
pg_prewarm
L'estensione pg_prewarm
carica i dati relazionali nella cache. La prewarming delle cache significa che le query hanno tempi di risposta migliori alla prima esecuzione dopo un riavvio. La funzionalità di preparazione automatica per il server flessibile 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 gli elementi dello schema e 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 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'esecuzione di 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 un errore simile al 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. Ciò è utile 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
ogni istanza del server flessibile 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'elenco di pg_stat_statements estensione e installarla usando il comando CREATE EXTENSION .
L'impostazione pg_stat_statements.track
, che controlla quali istruzioni vengono rilevate dall'estensione, il valore predefinito è top
, ovvero tutte le istruzioni rilasciate direttamente dai client vengono rilevate. 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 questo è il caso.
postgres_fdw
L'estensione postgres_fdw
consente di connettersi da un'istanza del server flessibile Database di Azure per PostgreSQL a un altro o a un altro database nello stesso server. Il server flessibile di 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 pg_toast
schema 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 nel server flessibile di Database di Azure non possono usare l'estensione pgstattuple
per gli oggetti all'interno dello pg_toast
schema.
In PostgreSQL 16 e 17 il pg_read_all_data
ruolo viene concesso automaticamente a azure_pg_admin
, consentendo pgstattuple
di funzionare correttamente. In PostgreSQL 14 e 15 i clienti possono concedere manualmente il pg_read_all_data
ruolo a per azure_pg_admin
ottenere lo stesso risultato. Tuttavia, in PostgreSQL da 11 a 13 il pg_read_all_data
ruolo non esiste.
I clienti non possono concedere direttamente le autorizzazioni necessarie. Se è necessario essere in grado di eseguire pgstattuple
per accedere agli oggetti nello pg_toast
schema, procedere con la creazione di una richiesta di supporto tecnico di Azure.
timescaleDB
L'estensione timescaleDB
è un database time series in pacchetto come estensione per PostgreSQL. Fornisce funzioni analitiche orientate al tempo e ottimizzazioni e ridimensiona Postgres per i carichi di lavoro delle serie temporali.
Altre informazioni su TimescaleDB, un marchio registrato di Timescale, Inc. Il server flessibile di Database di Azure per PostgreSQL fornisce TimescaleDB edizione Apache-2.
Installare TimescaleDB
Per usare timescaleDB
, assicurarsi di consentire l'elenco di estensioni, caricarne la libreria e installare l'estensione nel database in cui si prevede di usare la relativa funzionalità.
È ora possibile creare un hypertable TimescaleDB da zero o eseguire la migrazione dei dati delle serie temporali esistenti in PostgreSQL.
Ripristinare un database di scalabilità temporale usando pg_dump e pg_restore
Per ripristinare un database di scala cronologica usando pg_dump
e pg_restore
, è necessario eseguire due procedure helper nel database di destinazione: timescaledb_pre_restore()
e timescaledb_post restore()
.
Preparare prima di tutto il database di destinazione:
--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();
È ora possibile eseguire pg_dump
nel database originale e quindi eseguire pg_restore
. Dopo il ripristino, assicurarsi di eseguire il comando seguente nel database ripristinato:
SELECT timescaledb_post_restore();
Per altre informazioni sul metodo di ripristino con il database con scalabilità cronologica abilitata, vedere la documentazione sulla scala cronologica.
Ripristino di un database di scalabilità temporale usando timescaledb-backup
Durante l'esecuzione della SELECT timescaledb_post_restore()
procedura, è possibile che vengano negate le autorizzazioni durante l'aggiornamento del flag timescaledb.restore. Ciò è dovuto a un'autorizzazione ALTER DATABASE limitata nei servizi di database PaaS cloud. In questo caso, è possibile eseguire un metodo alternativo usando lo timescaledb-backup
strumento 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 tale scopo, effettuare i passaggi seguenti:
Creare una destinazione Database di Azure per PostgreSQL database e un'istanza del server flessibile.
Abilitare l'estensione Scala cronologica.
Concedere il
azure_pg_admin
ruolo all'utente usato da ts-restore.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 server flessibile offre una funzionalità di aggiornamento della versione principale sul posto che esegue un aggiornamento sul posto dell'istanza del server flessibile Database di Azure per PostgreSQL con una semplice interazione dell'utente. L'aggiornamento della versione principale sul posto semplifica il processo di aggiornamento flessibile del server di Database di Azure per PostgreSQL, riducendo al minimo le interruzioni 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
, pgaudit
, , postgres_fdw
e timescaledb
non sono supportate per tutte le versioni del server flessibili Database di Azure per PostgreSQL quando si usa la funzionalità di aggiornamento della versione principale sul posto.