Aggiornamento a una nuova versione principale

Databases for PostgreSQL offre tre diversi percorsi di aggiornamento:

  • Aggiornamento in loco a una nuova versione principale.
  • Ripristino dal backup.
  • Aggiornamento da una replica in sola lettura.

Quando una versione principale di un database si avvicina alla fine del ciclo di vita (EOL), è consigliabile effettuare l'aggiornamento a una versione principale più recente.

È possibile trovare le versioni disponibili di Databases for PostgreSQL nella pagina del catalogo IBM Cloud, tramite il comando del plug-in CLI di Cloud Databases ibmcloud cdb deployables-showo dall'endpoint API di Cloud Databases /deployables.

Quando si esegue l'aggiornamento a una nuova istanza, è necessario modificare anche le informazioni di connessione nell'applicazione.

Nei comandi di esempio riportati di seguito, è necessario specificare il CRN completo dell'istanza del database per l' {id}. Poiché il CRN contiene caratteri speciali, deve essere codificato con l' URL-encoding per evitare un errore "not_found".

Requisiti per l'aggiornamento a una versione principale più recente di “ PostgreSQL ”

Prima di avviare qualsiasi processo di aggiornamento a una versione principale, verificare tutte le estensioni, gli oggetti di replica e le dipendenze delle applicazioni che devono essere mantenuti.

Alcune estensioni e alcuni oggetti di replica logica sono specifici di una determinata versione oppure dipendono da componenti lato server che devono corrispondere alla versione principale di PostgreSQL. Rimuoverli prima dell'aggiornamento aiuta a evitare errori e consente di ricreare solo gli oggetti supportati una volta che la nuova versione è attiva.

Estensioni e oggetti di replica logica da esaminare

Prima di procedere all'aggiornamento, verificare i seguenti punti:

Estensioni

  • pg_repack
  • old_snapshot
  • wal2json
  • anon
  • PostGIS

Slot di replica

  • Logical replication slots

Dipendenze delle applicazioni Se si rimuovono estensioni o oggetti di replica da cui dipendono le applicazioni, verificare i flussi di dati e il comportamento delle applicazioni prima di procedere con l'aggiornamento. Considera inoltre le possibili interruzioni nella logica della tua applicazione che dipende da specifiche funzionalità di PostgreSQL.

pg_repack

Eliminare la directory pg_repack prima dell'aggiornamento e ricrearla dopo l'aggiornamento. pg_repack utilizza un'estensione specifica per la versione e componenti client/server che devono corrispondere alla versione principale di PostgreSQL.

DROP EXTENSION pg_repack;

Ricrea l'estensione dopo l'aggiornamento solo se il tuo carico di lavoro la richiede ancora.

CREATE EXTENSION pg_repack;

old_snapshot

Prima dell'aggiornamento, eliminare il file " old_snapshot ". Non ricrearlo dopo l'aggiornamento a PostgreSQL 18, poiché non è più supportato.

DROP EXTENSION old_snapshot;

wal2json slot di replica

Se si utilizza " wal2json " per la decodifica logica, è necessario eliminare tutti gli slot di replica associati prima dell'aggiornamento. L'utilità pg_upgrade vieta categoricamente l'aggiornamento alla versione principale finché sono presenti slot di replica e, in tal caso, genererà un errore critico e interromperà l'aggiornamento.

Prima dell'aggiornamento:

  1. Assicurarsi che tutti i dati WAL in sospeso siano stati elaborati.
  2. Chiudi l'applicazione che utilizza lo slot di replica.
  3. Eliminare gli slot di replica:
SELECT pg_drop_replication_slot('your_slot_name');

Dopo l'aggiornamento, è possibile ricreare gli slot di replica secondo necessità. Si noti che wal2json non viene installato tramite CREATE EXTENSION, ma viene configurato tramite i parametri del database (wal_level, max_replication_slots, max_wal_senders) e le autorizzazioni delle tabelle, che non impediscono gli aggiornamenti.

anon

Rimuovi l'estensione " anon " prima dell'aggiornamento e riattivala dopo l'aggiornamento, se ne hai ancora bisogno. Prima di disattivare anon sono necessari ulteriori passaggi.

Se è installata l'estensione " anon ", seguire i passaggi riportati di seguito ed eseguire i comandi come utente amministratore prima di procedere all'aggiornamento.

  1. Rimuovi tutte le regole di mascheramento (se attive).

    SELECT anon.remove_masks_for_all_columns();
    
  2. Disattivare i ruoli mascherati (l'aggiornamento potrebbe non andare a buon fine se alcuni ruoli sono contrassegnati come mascherati).

    SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;
    
  3. Rimuovi l'estensione anon con l'opzione cascade.

    DROP EXTENSION anon CASCADE;
    
  4. Se l'estensione " anon " è installata in più database all'interno di un'istanza, seguire i passaggi indicati per ciascun database.

  5. Una volta completato l'aggiornamento, riattivare l'estensione " anon " e riapplicare le regole di mascheramento secondo necessità.

Si raccomanda vivamente di verificare i dati sia prima che dopo l'eliminazione dell'estensione, al fine di garantire la coerenza del mascheramento prima di eseguire l'aggiornamento.

PostGIS

Se utilizzi PostGIS,, esegui prima l'aggiornamento di PostGIS prima di aggiornare PostgreSQL.

SELECT postgis_extensions_upgrade();

Utilizza la seguente query per verificare la correttezza dell'aggiornamento dell'estensione PostGIS.

SELECT postgis_full_version();

Logical replication slots

Prima dell'aggiornamento, eliminare tutti gli slot di replica logica e ricrearli dopo l'aggiornamento. Gli slot logici sono legati allo stato del server di origine e devono essere ricreati da zero sull'istanza aggiornata.

SELECT pg_drop_replication_slot('<slot_name>');

Aggiornamenti alla versione principale senza reinstallazione

Un aggiornamento della versione principale in loco (IPU) consente di aggiornare la propria distribuzione a una versione supportata /docs/databases-for-postgresql?topic=databases-for-postgresql-versioning-policy#version-definitions senza dover ripristinare un backup in una nuova distribuzione. L'aggiornamento mantiene le stringhe di connessione esistenti, quindi non è necessaria alcuna riconfigurazione.

Tuttavia, potrebbero essere necessarie modifiche all'applicazione qualora la nuova versione presentasse problemi di compatibilità.

Durante la finestra di aggiornamento, la tua distribuzione subirà un breve periodo di inattività. La durata dipende dalle dimensioni e dalla complessità della vostra implementazione.

Se le tue applicazioni devono continuare a leggere i dati durante l'aggiornamento, puoi configurare una replica in sola lettura (vedi /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-provision) e aggiornare la tua applicazione affinché utilizzi tale replica. È possibile promuovere la replica a primario se l'aggiornamento non viene completato correttamente. Per ulteriori informazioni, consultare /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-ipu.

Databases for PostgreSQL non crea automaticamente dei backup prima o dopo un aggiornamento in loco a una versione principale.

Per migliorare la recuperabilità, creare:

  • Un backup prima dell'aggiornamento per proteggere lo stato attuale dei dati
  • Un backup subito dopo l'aggiornamento per creare il primo punto di ripristino per la nuova versione

Se non si esegue un backup dopo l'aggiornamento, il ripristino a un punto nel tempo (PITR) non sarà disponibile per la nuova versione fino al completamento del successivo backup pianificato.

I backup e i punti PITR creati prima dell'aggiornamento rimangono associati alla versione precedente e non possono essere ripristinati nella versione aggiornata. Tuttavia, possono comunque essere utilizzati per ripristinare la versione precedente in una nuova distribuzione.

Slot di replica logica

Prima dell'aggiornamento, eliminare tutti gli slot di replica logica e ricrearli al termine dell'aggiornamento. Gli slot di replica logica sono legati allo stato del server di origine e devono essere ricreati sull'istanza aggiornata.

SELECT pg_drop_replication_slot('<slot_name>');

Prima di iniziare

Prima di avviare l'aggiornamento, verificare quanto segue:

  • Verifica che gli aggiornamenti di versione siano supportati per la tua distribuzione utilizzando l'interfaccia utente, l'API, la CLI o Terraform.

    Esempio (CLI):

    ibmcloud cdb capability-show versions postgresql
    
  • Verificare i requisiti di pre-controllo. L'aggiornamento viene eseguito sulla distribuzione di origine e viene bloccato se vengono rilevati dei rischi. Assicurarsi che:

    • L'implementazione è corretta
    • È disponibile almeno il 10% di spazio libero su disco
    • L'utilizzo dell'I/O è inferiore al 90%
    • Le dimensioni dello schema e il numero di oggetti rientrano nei limiti consentiti
    • La pulizia delle estensioni e degli slot di replica logica richiesta è stata completata
  • Consulta il documento " https://www.postgresql.org/docs/release/ " per verificare eventuali modifiche alla compatibilità che potrebbero influire sulle tue applicazioni.

  • Il ripristino a una versione precedente non è supportato.

  • Un aggiornamento in loco non può essere annullato una volta avviato.

  • Assicurati che sia disponibile un backup recente prima di procedere all'aggiornamento.

Percorsi di aggiornamento in loco supportati per Gen2
Fonte: versione PostgreSQL Destinazione supportata per l'aggiornamento in loco
18 Prossime versioni principali (quando disponibili)

Gen2 inizia con “ PostgreSQL ” 18. I percorsi di aggiornamento alle versioni più recenti vengono aggiunti man mano che vengono supportati. Per le versioni precedenti (14–17), consultare la pagina /docs/databases-for-postgresql?topic=databases-for-postgresql-upgrading.

Una volta completato l'aggiornamento, la tua distribuzione utilizzerà una nuova versione principale di PostgreSQL. I backup e i punti PITR precedenti all'aggiornamento appartengono alla cronologia della versione precedente e non possono essere ripristinati nella versione aggiornata.

Per mantenere le funzionalità di ripristino e PITR nella nuova versione, eseguire un backup subito dopo l'aggiornamento. Questo backup costituisce il punto di riferimento per le future operazioni di ripristino.

Se l'aggiornamento non va a buon fine, è comunque possibile utilizzare i backup effettuati prima dell'aggiornamento con la funzione PITR per ripristinare la versione precedente in una nuova distribuzione.

Aggiornamento nell'interfaccia utente

  1. Crea una distribuzione di prova ripristinando un backup dalla tua distribuzione esistente con la stessa versione.

  2. Aggiorna la tua applicazione di staging in modo che utilizzi la distribuzione di prova e verifica che funzioni correttamente.

  3. Avvia l'aggiornamento dalla pagina Panoramica facendo clic su " Aggiorna versione principale ".

  4. Verificare il corretto funzionamento dell'applicazione sull'ambiente di test aggiornato.

  5. Una volta completata la convalida, esegui l'aggiornamento dell'implementazione in produzione.

    Una volta avviato l'aggiornamento, non è possibile interromperlo né annullarlo. Assicurarsi che sia disponibile un backup recente.

Il tempo di scadenza per l'avvio dell'aggiornamento indica entro quanto tempo il processo di aggiornamento deve essere avviato prima di essere automaticamente annullato. Imposta questo valore in base alla tua finestra di manutenzione. Ad esempio, se l'aggiornamento richiede 30 minuti e il tempo a disposizione è di 1 ora, imposta la scadenza a 30 minuti. La durata può variare da 5 minuti a 24 ore.

Aggiornamento tramite l'API

Utilizza la seguente richiesta per avviare un aggiornamento in loco:

curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/version \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
  -d '{"version": "15"}'

Per ulteriori informazioni, consultare l'API " Cloud Databases ".

Aggiornamento tramite CLI

Disponibile nella versione del plugin CDB >= 0.20.0.

Per visualizzare i percorsi di aggiornamento disponibili:

ibmcloud cdb deployment-capability-show <NAME|CRN> versions

Per avviare un aggiornamento:

ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>

Per i dettagli sul comando:

ibmcloud cdb deployment-version-upgrade --help

Per impostare il tempo di scadenza, utilizzare --expire-in oppure --expire-at.

Aggiornamento tramite Terraform

Disponibile nella versione del provider Terraform >= 1.79.2.

Per eseguire l'aggiornamento, modifica il valore " version " nella configurazione.

Se non si esegue il backup prima di un aggiornamento, si rischia di perdere i dati nel caso in cui l'aggiornamento non vada a buon fine. Assicurarsi che sia disponibile un backup recente.

Se necessario, aumenta il timeout, poiché Terraform utilizza i timeout anziché i timestamp di scadenza.

Risoluzione dei problemi

Se dovessero verificarsi problemi dopo un aggiornamento andato a buon fine e fosse necessario tornare alla versione precedente, contattare l'assistenza di IBM Cloud® per ricevere assistenza. Si raccomanda di evitare di eseguire operazioni PITR o ripristini senza una guida adeguata, poiché ciò potrebbe complicare il processo di ripristino.

Gli aggiornamenti vengono eseguiti solo dopo che tutti i controlli preliminari sono stati superati. Se l'aggiornamento risulta bloccato, verificare quanto segue:

  • Stato di integrità del cluster (lo stato di Patroni è stabile)
  • Spazio libero su disco sufficiente
  • Utilizzo accettabile delle operazioni di I/O su disco
  • Limiti relativi alle dimensioni dello schema e al numero di oggetti

Schemi di grandi dimensioni e un numero elevato di oggetti possono allungare la durata dell'aggiornamento.

Se i tentativi di aggiornamento continuano a fallire, apri un ticket di assistenza tramite https://cloud.ibm.com/login?redirect=%2Funifiedsupport%2Fsupportcenter.

Aggiornamento da una replica in sola lettura

Eseguire l'aggiornamento configurando una replica in sola lettura. Configurare una replica in sola lettura con la stessa versione del database della propria distribuzione e attendere che tutti i dati vengano replicati. Una volta sincronizzate l'istanza e la sua replica, promuovere e aggiornare la replica in sola lettura trasformandola in un'istanza completa e autonoma che esegue la nuova versione del database. Per eseguire la fase di aggiornamento e promozione, inviare una richiesta POST all'/deployments/{id}/remotes/promotion endpoint, indicando nel corpo della richiesta la versione a cui si desidera effettuare l'aggiornamento.

La richiesta ha il seguente aspetto:

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{
    "promotion": {
        "version": "14",
        "skip_initial_backup": false
    }
}' \

skip_initial_backup è facoltativo. Se impostato su “ true ”, la nuova distribuzione non esegue un backup iniziale al termine della promozione. La nuova distribuzione sarà disponibile in tempi più brevi, ma non verrà sottoposta a backup fino all'esecuzione del prossimo backup automatico o fino a quando non si effettuerà un backup su richiesta.

Esecuzione a secco della promozione e dell'aggiornamento

Per valutare gli effetti degli aggiornamenti di versione principali, eseguire una simulazione. Una simulazione riproduce la promozione e l'aggiornamento, con i risultati registrati nei log del database. Accedi ai log del tuo database e visualizzali tramite l'integrazione "Analisi dei log ". Ciò garantisce che la versione attualmente in uso, con le relative estensioni, possa essere aggiornata correttamente alla versione desiderata.

La simulazione deve essere eseguita con skip_initial_backup impostato su false`` e con version definito.

Il comando è il seguente:

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{
    "promotion": {
        "version": "14",
        "skip_initial_backup": false,
        "dry_run": true
    }
}' \

Backup e ripristino dell'aggiornamento

È possibile aggiornare la versione del database ripristinando un backup dei dati in una nuova istanza che utilizza la nuova versione del database.

Aggiornamento nell'interfaccia utente

Esegui l'aggiornamento a una nuova versione quando ripristini un backup dal menu "Backup " della tua dashboard di distribuzione. Fai clic su "Ripristina " su un backup per aprire la pagina di provisioning in una nuova scheda, dove potrai modificare alcune opzioni per la nuova distribuzione. Una delle opzioni è la versione del database, che viene compilata automaticamente con le versioni disponibili per l'aggiornamento. Seleziona una versione e fai clic su "Crea" per avviare il processo di configurazione e ripristino.

Aggiornamento tramite CLI

Per eseguire l'aggiornamento e il ripristino da un backup tramite la CLI di IBM Cloud, utilizzare il comando di provisioning dal controller delle risorse.

ibmcloud resource service-instance-create <DEPLOYMENT_NAME_OR_CRN> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>

I parametri service-name, service-id, service-plan-id e region sono tutti obbligatori. Inoltre, è necessario fornire all' -p, in un oggetto JSON, i parametri relativi alla versione e all'ID del backup. La nuova distribuzione viene configurata automaticamente con le stesse dimensioni di disco e memoria della distribuzione di origine al momento del backup.

Questo comando ha il seguente aspetto:

ibmcloud resource service-instance-create example-upgrade databases-for-postgresql standard us-south \
-p \ '{
  "backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
  "version":14
}'

Aggiornamento tramite l'API

Prima di utilizzare l'API del controller delle risorse per eseguire l'aggiornamento da un backup, completare i passaggi necessari. Quindi, invia all'API una richiesta di tipo " POST ". I parametri name, target, resource_group e resource_plan_id sono tutti obbligatori. Devi inoltre fornire la versione e l'ID del backup. La nuova distribuzione presenta la stessa allocazione di memoria e spazio su disco della distribuzione di origine al momento del backup.

Questo comando ha il seguente aspetto:

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "my-instance",
    "target": "bluemix-us-south",
    "resource_group": "5g9f447903254bb58972a2f3f5a4c711",
    "resource_plan_id": "databases-for-postgresql-standard",
    "backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
    "version":14
  }'

Aggiornamento forzato

Dopo la data di fine supporto, tutte le installazioni attive di Databases for PostgreSQL che utilizzano una versione obsoleta vengono automaticamente aggiornate alla versione successiva supportata. Ad esempio, PostgreSQL 13 (obsoleto) viene aggiornato alla versione 14.

Eseguire l'aggiornamento prima della data di fine supporto per evitare i seguenti rischi:

  • Per questo tipo di aggiornamento forzato non sono previsti accordi SLA.
  • Potresti subire una perdita di dati.
  • La tua applicazione potrebbe subire un periodo di inattività prolungato.
  • L'applicazione potrebbe smettere di funzionare se non è compatibile con la nuova versione.
  • Non è possibile determinare quando avverrà questo aggiornamento per la propria distribuzione.
  • Non è prevista alcuna procedura di ripristino per questo aggiornamento forzato.

Per le date di fine vita, consultare il sito pagina relativa alla politica sulle versioni.

Problemi relativi ai privilegi dei ruoli durante gli aggiornamenti di versione

A partire da PostgreSQL 16, l'applicazione dei privilegi di ruolo è più rigorosa. Si tratta di una modifica architetturale a monte di PostgreSQL, non di una modifica comportamentale specifica di IBM®. Nelle versioni precedenti, i ruoli dotati dell'attributo " CREATEROLE " potevano gestire altri ruoli in modo più ampio. In PostgreSQL 16 e versioni successive, affinché un ruolo possa concedere o revocare un altro ruolo, deve disporre dell’autorizzazione “ ADMIN OPTION ” su quest’ultimo. Per ulteriori informazioni, consultare le note di rilascio di “ PostgreSQL e 16”, gli attributi dei ruoli e la guida GRANT ” relativa ai ruoli.

Se si sta effettuando l'aggiornamento da PostgreSQL 15 o versioni precedenti a PostgreSQL 16 o versioni successive, verificare le autorizzazioni associate ai ruoli prima di avviare l'aggiornamento in loco (IPU). Se la gestione dei ruoli deve proseguire dopo l'aggiornamento, assicurarsi che ai ruoli richiesti sia concessa l'opzione WITH ADMIN OPTION prima di avviare l'aggiornamento.

Se dopo l'aggiornamento dovessi riscontrare errori relativi ai privilegi, ad esempio:

ERROR: only roles with the ADMIN OPTION on role "some_role" may grant this role
DETAIL: role "admin" is not permitted to grant role "some_role"

Utilizza la funzione di supporto integrata grant_admin_option_to_roles per ripristinare ADMIN OPTION per ruoli specifici:

  • Si applica solo ai database aggiornati da PostgreSQL v15 e versioni precedenti a PostgreSQL 16 e versioni successive (se si verifica l'errore descritto sopra).
  • Accetta un elenco arbitrario di ruoli a cui applicare la correzione.
  • Può essere eseguito solo dall' admin user.
  • È sicuro eseguirlo più volte (è idempotente).

Esempio di utilizzo:

SELECT grant_admin_option_to_roles('role1', 'role2', 'role3');

Questa funzione assegna i ruoli specificati (role1, role2, role3) all'utente admin con ADMIN OPTION, consentendo all'utente admin di gestire (assegnare, revocare, modificare o eliminare) tali ruoli nelle istanze aggiornate.

Registro delle modifiche per le principali versioni di PostgreSQL

Per informazioni sulle versioni precedenti di “ PostgreSQL ” (dalla 14 alla 17), consultare il log delle modifiche di “ Gen1 ”.