Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Come eseguire un aggiornamento della versione principale di RDS per PostgreSQL
Consigliamo la seguente procedura per eseguire l'aggiornamento della versione principale su un database Amazon RDS per PostgreSQL:
-
Disponibile gruppo di parametri compatibile con la versione – Se si sta utilizzando un gruppo di parametri personalizzato, sono disponibili due opzioni. È possibile specificare un gruppo di parametri predefinito per la nuova versione del motore database. Oppure è possibile creare un gruppo di parametri personalizzato per la nuova versione del motore database. Per ulteriori informazioni, consultare Gruppi di parametri per RDS e Utilizzo di gruppi di parametri cluster di database per cluster database Multi-AZ.
-
Verifica della presenza di classi di database non supportate: verifica che la classe di istanza del database sia compatibile con la versione PostgreSQL a cui si sta eseguendo l'aggiornamento. Per ulteriori informazioni, consulta Motori DB supportati per classi di istanza database.
-
Controllare l'utilizzo non supportato:
-
Transazioni preparate – Eseguire il commit o il rollback di tutte le transazioni preparate prima di provare a eseguire un aggiornamento.
È possibile utilizzare la seguente query per verificare che sull'istanza non siano presenti transazioni preparate aperte.
SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
-
Tipi di dati Reg* – Rimuovere tutti gli utilizzi dei tipi di dati reg* prima di tentare un aggiornamento. Ad eccezione di
regtype
eregclass
, non è possibile aggiornare i tipi di dati reg*. L'utilitàpg_upgrade
non può preservare questo tipo di dati che sono utilizzati da per eseguire l'aggiornamento.Per verificare che non siano presenti utilizzi di tipi di dati reg* non supportati, utilizzare la query seguente per ogni database.
SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
-
-
Verifica la presenza di database non validi:
-
Assicurati che non ci siano database non validi. La
datconnlimit
colonna delpg_database
catalogo include il valore-2
per contrassegnare come non validi i database che sono stati interrotti durante un'operazione.DROP DATABASE
Utilizzate la seguente query per verificare la presenza di database non validi:
SELECT datname FROM pg_database WHERE datconnlimit = - 2;
-
La query precedente restituisce nomi di database non validi. È possibile utilizzare
DROP DATABASE
per eliminare database non validi. Puoi anche usare il seguente comando per eliminare i database non validi:invalid_db_name
;SELECT 'DROP DATABASE ' || quote_ident(datname) || ';' FROM pg_database WHERE datconnlimit = -2 \gexec
Per ulteriori informazioni sui database non validi, vedere Comprensione del comportamento dell'autovacuum con database non validi.
-
-
Gestione degli slot di replica logica: non è possibile eseguire un aggiornamento se il database dispone di slot di replica logica. Gli slot di replica logica vengono generalmente utilizzati per la migrazione AWS DMS e la replica di tabelle dal database a data lake, strumenti di BI e altre destinazioni. Prima di eseguire l'aggiornamento, assicurati di conoscere lo scopo di qualsiasi slot di replica logica in uso e verifica che sia corretto eliminarli. Se gli slot di replica logica sono ancora in uso, non devono essere eliminati e non è possibile procedere con l'aggiornamento.
Se gli slot di replica logica non sono necessari, è possibile eliminarli utilizzando il seguente SQL:
SELECT * FROM pg_replication_slots WHERE slot_type NOT LIKE 'physical'; SELECT pg_drop_replication_slot(slot_name);
È inoltre necessario rimuovere gli slot nelle configurazioni di replica logica che utilizzano l'estensione
pglogical
per un corretto aggiornamento della versione principale. Per informazioni su come identificare e rimuovere gli slot creati utilizzando l'estensionepglogical
, consulta Gestione degli slot di replica logica per Postgre per Postgre SQL. -
Gestione delle repliche di lettura: un aggiornamento di un'istanza database single-AZ o di una implementazione multi-AZ di un'istanza database aggiorna anche le repliche di lettura nella regione assieme all'istanza database primaria. Amazon RDS non aggiorna le repliche di lettura del cluster database multi-AZ.
Non è possibile aggiornare le repliche di lettura separatamente. Se fosse consentito, si potrebbero verificare situazioni in cui i database primari e di replica hanno versioni principali PostgreSQL diverse. Tuttavia, gli aggiornamenti delle repliche di lettura potrebbero aumentare i tempi di inattività sull'istanza database primaria. Per impedire un aggiornamento della replica di lettura, promuovi la replica a un'istanza autonoma o eliminala prima di avviare il processo di aggiornamento.
Il processo di aggiornamento ricrea il gruppo di parametri della replica di lettura in base al gruppo di parametri corrente della replica de lettura. Puoi applicare un gruppo di parametri personalizzato a una replica di lettura solo dopo il completamento dell'aggiornamento modificando la replica di lettura. Per ulteriori informazioni sulle repliche di lettura, consulta Utilizzo delle repliche di lettura per Amazon RDS per PostgreSQL.
-
Gestisci le integrazioni zero-ETL: se disponi di un'integrazione zero-ETL esistente, eliminala prima di eseguire un aggiornamento della versione principale. Quindi, dopo aver completato l'aggiornamento, ricrea l'integrazione.
-
Eseguire un backup – Si consiglia di eseguire un backup prima di eseguire un aggiornamento della versione principale in modo da avere un punto di ripristino noto per il database. Se il periodo di conservazione dei backup è maggiore di 0, il processo di aggiornamento crea snapshot database del database prima e dopo un aggiornamento. Per cambiare il periodo di conservazione dei backup, consulta Modifica di un'istanza Amazon RDS DB e Modifica di un cluster DB Multi-AZ per Amazon RDS.
Per eseguire un backup manuale, consulta Creazione di uno snapshot DB per un'istanza DB Single-AZ per Amazon RDS e Creazione di uno snapshot del cluster DB Multi-AZ per Amazon RDS.
-
Aggiorna determinate estensioni prima dell'aggiornamento della versione principale: se intendi ignorare una versione principale durante l'aggiornamento, è necessario aggiornare alcune estensioni prima di eseguire l’aggiornamento della versione principale. Ad esempio, l'aggiornamento dalle versioni 9.5.x o 9.6.x alla versione 11.x salta una versione principale. Le estensioni da aggiornare includono PostGIS e le relative estensioni per l'elaborazione dei dati spaziali.
-
address_standardizer
-
address_standardizer_data_us
-
postgis_raster
-
postgis_tiger_geocoder
-
postgis_topology
Non è possibile eseguire l'aggiornamento diretto alla versione 17 di PostgreSQL se si
rdkit
utilizza la versione 4.6.0 e precedenti e PostgreSQL versione 16 e precedenti, a causa di incompatibilità.rdkit
Di seguito sono elencate le opzioni di aggiornamento:-
Se utilizzi la versione 13 e precedenti di PostgreSQL, devi prima eseguire un aggiornamento della versione principale alla versione 14.14 e successive 14 versioni, 15.9 e successive 15 versioni o 16.5 e versioni successive 16, quindi eseguire l'aggiornamento della versione a PostgreSQL 17.
-
Se utilizzi la versione 14, 15 o 16 di PostgreSQL, devi eseguire un aggiornamento della versione minore alla versione 14.14 e successive 14 versioni, 15.9 e versioni successive 15 o 16.5 e versioni successive 16, quindi eseguire l'aggiornamento alla versione 17 di PostgreSQL.
Esegui il comando seguente per ogni estensione in uso:
ALTER EXTENSION
PostgreSQL-extension
UPDATE TO 'new-version
';Per ulteriori informazioni, consulta Aggiornamento delle SQL estensioni Postgre nei database Postgre RDS SQL. Per ulteriori informazioni sull'aggiornamento di PostGIS, consulta Passaggio 6: Aggiorna l'GISestensione Post.
-
-
Rimuovere alcune estensioni prima dell'aggiornamento alla versione principale – Un aggiornamento che ignora una versione principale per passare direttamente alla versione 11.x non supporta l'aggiornamento dell'estensione
pgRouting
. L'aggiornamento dalle versioni 9.4.x, 9.5.x o 9.6.x alle versioni 11.x ignora una versione principale. È possibile rimuovere senza conseguenze l'estensionepgRouting
e reinstallarla con una versione compatibile dopo l'aggiornamento. Per le versioni dell'estensione aggiornabili, consultare Versioni di estensione Postgre SQL supportate.Le estensioni
tsearch2
echkpass
non sono più supportate per PostgreSQL 11 o versioni successive. Se si esegue l'aggiornamento alla versione 11.x, rimuovere le estensionitsearch2
echkpass
prima dell'aggiornamento. -
Eliminare tipi di dati sconosciuti – Eliminare i tipi di dati
unknown
a seconda della versione di destinazione.PostgreSQL versione 10 ha smesso di supportare il tipo di dati
unknown
. Se un database versione 9.6 utilizza il tipo di datiunknown
, un aggiornamento a una versione 10 mostra un messaggio di errore del tipo seguente:Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because the 'unknown' data type is used in user tables. Please remove all usages of the 'unknown' data type and try again."
Per trovare il tipo di dati
unknown
nel database in modo da poter rimuovere la colonna danneggiata o modificarla in un tipo di dati supportato, utilizza il seguente codice SQL:SELECT DISTINCT data_type FROM information_schema.columns WHERE data_type ILIKE 'unknown';
-
Eseguire un test di aggiornamento – Si consiglia fortemente di testare l'aggiornamento alla versione principale su un duplicato del database di produzione prima di provare l'aggiornamento sul database effettivo. È possibile monitorare i piani di esecuzione sul database di test duplicato per eventuali regressioni del piano di esecuzione e valutarne le prestazioni. Per creare un'istanza di test duplicata, puoi ripristinare il database da un'istantanea recente o ripristinare il database all'ultima data di ripristino. point-in-time
Per ulteriori informazioni, consulta Ripristino da uno snapshot o Ripristino di un'istanza DB a un'ora specificata per Amazon RDS. Per i cluster multi-AZ, consulta Ripristino da uno snapshot a un cluster di database Multi-AZ o Ripristino di un cluster di database Multi-AZ a un determinato momento.
Per i dettagli sull'esecuzione dell'aggiornamento, consulta Aggiornamento manuale della versione del motore.
Durante l'aggiornamento di un database dalla versione 9.6 alla versione 10, tieni presente che in PostgreSQL 10 le query parallele sono abilitate per impostazione predefinita. Puoi testare l'impatto del parallelismo prima dell'aggiornamento modificando il parametro
max_parallel_workers_per_gather
sul tuo database di test impostandolo su 2.Nota
Il valore di default per il parametro
max_parallel_workers_per_gather
nel gruppo parametri del databasedefault.postgresql10
è 2.Per ulteriori informazioni, consulta Parallel Query
(Query parallela) nella documentazione di PostgreSQL. Per disabilitare il parallelismo sulla versione 10, imposta il parametro max_parallel_workers_per_gather
su 0.Durante l'aggiornamento della versione principale, i database
public
etemplate1
, nonché lo schemapublic
in ciascun database vengono rinominati temporaneamente. Questi oggetti vengono riportati nei log con il loro nome originale e con l'aggiunta di una stringa casuale. La stringa viene aggiunta in modo che, durante l'aggiornamento alla versione principale, vengano preservate le impostazioni personalizzate comelocale
eowner
. Al termine dell'aggiornamento gli oggetti vengono rinominati con i loro nomi originali.Nota
Durante il processo di aggiornamento della versione principale, non è possibile eseguire un point-in-time ripristino dell'istanza DB o del cluster DB Multi-AZ. Dopo aver eseguito l'aggiornamento, Amazon RDS effettua un backup automatico del database. È possibile eseguire un point-in-time ripristino ai tempi precedenti all'inizio dell'aggiornamento e dopo il completamento del backup automatico del database.
-
Se un aggiornamento restituisce errori durante la procedura di controllo preliminare, risolvere i problemi – Durante l'aggiornamento alla versione principale, Amazon RDS for PostgreSQL esegue una procedura di controllo preliminare per identificare eventuali problemi che potrebbero impedire l'aggiornamento. La procedura di controllo preliminare verifica tutte le condizioni potenzialmente incompatibili in tutti i database dell'istanza.
Se il controllo preliminare rileva un problema, crea un evento di log che indica che il controllo preliminare dell'aggiornamento non è riuscito. I dettagli del processo di controllo preliminare si trovano in un log dell'aggiornamento denominato
pg_upgrade_precheck.log
per tutti i database. Amazon RDS aggiunge un timestamp al nome file. Per ulteriori informazioni sulla visualizzazione dei log, consultare Monitoraggio dei file di log di RDSAmazon.Se un aggiornamento della replica di lettura non riesce al controllo preliminare, la replica della replica di lettura non riuscita viene interrotta e la replica di lettura viene messa nello stato terminato. Elimina la replica di lettura e ricrea una nuova replica di lettura in base all'istanza primaria aggiornata.
Risolvere tutti i problemi rilevati nel log di controllo preliminare, quindi riprovare l'aggiornamento alla versione principale. Nell'esempio seguente viene mostrato un esempio di log di controllo preliminare.
------------------------------------------------------------------------ Upgrade could not be run on Wed Apr 4 18:30:52 2018 ------------------------------------------------------------------------- The instance could not be upgraded from 9.6.11 to 10.6 for the following reasons. Please take appropriate action on databases that have usage incompatible with the requested major engine version upgrade and try the upgrade again. * There are uncommitted prepared transactions. Please commit or rollback all prepared transactions.* One or more role names start with 'pg_'. Rename all role names that start with 'pg_'. * The following issues in the database 'my"million$"db' need to be corrected before upgrading:** The ["line","reg*"] data types are used in user tables. Remove all usage of these data types. ** The database name contains characters that are not supported by RDS for PostgreSQL. Rename the database. ** The database has extensions installed that are not supported on the target database version. Drop the following extensions from your database: ["tsearch2"]. * The following issues in the database 'mydb' need to be corrected before upgrading:** The database has views or materialized views that depend on 'pg_stat_activity'. Drop the views.
-
Se un aggiornamento della replica di lettura non riesce durante l'aggiornamento del database, risolvi il problema: lo stato di una replica di lettura non riuscita viene impostato su
incompatible-restore
e la replica viene terminata sul database. Elimina la replica di lettura e ricrea una nuova replica di lettura in base all'istanza primaria aggiornata.Nota
Amazon RDS non aggiorna le repliche di lettura per i cluster database multi-AZ. Se si esegue un aggiornamento di una versione principale su un cluster DB Multi-AZ, lo stato di replica delle relative repliche di lettura diventa terminato.
L'aggiornamento della replica di lettura potrebbe non riuscire per i seguenti motivi:
-
Non è stato in grado di recuperare il ritardo con l'istanza database primaria anche dopo un tempo di attesa.
-
Il terminale o lo stato del ciclo di vita è incompatibile, come ad esempio spazio di storage esaurito, ripristino incompatibile e così via.
-
Quando l'aggiornamento dell'istanza database principale è stato avviato, nella replica di lettura era in esecuzione un aggiornamento di versione secondaria separata.
-
La replica di lettura ha utilizzato parametri incompatibili.
-
La replica di lettura non è in grado di comunicare con l'istanza database primaria per sincronizzare la cartella dati.
-
-
Aggiornamento del database di produzione: se l'esecuzione dell'aggiornamento della versione principale ha esito positivo, dovresti essere in grado di eseguire l'aggiornamento del database di produzione senza problemi. Per ulteriori informazioni, consulta Aggiornamento manuale della versione del motore.
-
Eseguire l'operazione
ANALYZE
per aggiornare la tabellapg_statistic
. È necessario farlo per ogni database su tutti i database PostgreSQL. Le statistiche di ottimizzazione non vengono trasferite durante un aggiornamento della versione principale, quindi è necessario rigenerare tutte le statistiche per evitare problemi di prestazioni. Esegui il comando senza parametri per generare statistiche per tutte le tabelle regolari del database corrente, come segue:ANALYZE VERBOSE;
Il flag
VERBOSE
è facoltativo, ma usandolo viene mostrato lo stato di avanzamento. Per ulteriori informazioni, consulta ANALYZEnella documentazione di PostgreSQL. Quando analizzi tabelle specifiche invece di utilizzare ANALYZE VERBOSE, esegui il comando ANALYZE per ogni tabella come segue:
ANALYZE
table_name
;Per le tabelle partizionate, analizzate sempre la tabella principale. Questo processo:
-
Campiona automaticamente le righe in tutte le partizioni
-
Aggiorna le statistiche per ogni partizione in modo ricorsivo
-
Mantiene le statistiche di pianificazione essenziali a livello principale
Sebbene le tabelle principali non memorizzino dati effettivi, la loro analisi è fondamentale per l'ottimizzazione delle query. L'esecuzione di ANALYZE solo su singole partizioni può portare a prestazioni di query scadenti poiché l'ottimizzatore non disporrà delle statistiche complete necessarie per una pianificazione efficiente tra le partizioni.
Nota
Esegui ANALYZE sul tuo sistema dopo l'aggiornamento per evitare problemi di prestazioni.
-
Al termine dell'aggiornamento alla versione principale, è consigliabile:
-
Un aggiornamento PostgreSQL non aggiorna alcuna estensione PostgreSQL. Per aggiornare le estensioni, consulta Aggiornamento delle SQL estensioni Postgre nei database Postgre RDS SQL.
-
Facoltativamente, utilizza Amazon RDS per visualizzare i due log generati dalla utilità
pg_upgrade
. Questi sonopg_upgrade_internal.log
epg_upgrade_server.log
. Amazon RDS accoda un timestamp al nome file per questi log. Puoi visualizzare questi log come qualsiasi altro log. Per ulteriori informazioni, consulta Monitoraggio dei file di log di RDSAmazon.Puoi anche caricare i log di aggiornamento su Amazon CloudWatch Logs. Per ulteriori informazioni, consulta Pubblicazione dei log PostgreSQL su Amazon Logs CloudWatch .
-
Per verificare che tutto funzioni come previsto, testa l'applicazione sul database aggiornato con un carico di lavoro analogo. Dopo la verifica dell'aggiornamento è possibile eliminare l'istanza di test.