Come posso risolvere i problemi relativi all'estensione PostGIS quando aggiorno la mia istanza RDS per PostgreSQL?
L'aggiornamento della versione principale dell’istanza Amazon Relational Database Service (Amazon RDS) per PostgreSQL non è riuscito a causa di problemi con l'estensione PostGIS.
Breve descrizione
L'aggiornamento della versione principale dell’istanza Amazon RDS per PostgreSQL potrebbe non riuscire per diversi motivi. Il più comune è un'estensione PostGIS obsoleta o estensioni dipendenti. Prima di eseguire l'aggiornamento della versione principale, è necessario aggiornare PostGIS e le estensioni dipendenti. Le estensioni dipendenti includono address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology o postgis_raster.
Innanzitutto, determina se l'aggiornamento della versione principale dell'istanza RDS per PostgreSQL non è riuscito a causa delle estensioni. Se il problema riguarda le estensioni, aggiorna PostGIS e le sue estensioni dipendenti.
Soluzione
Verifica della necessita di aggiornamenti delle estensioni dell’istanza
Per determinare se l'aggiornamento della versione principale dell'istanza RDS per PostgreSQL non è riuscito a causa delle estensioni, completa le seguenti attività.
Visualizza gli eventi dell'istanza. Potresti vedere un evento simile al seguente:
Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because one or more databases have settings or usages that are not compatible with the target engine version. Please check the precheck log file for more details
Visualizza i file di log di controllo preliminare dell'istanza. Durante l’aggiornamento della versione principale, RDS per PostgreSQL esegue procedure di controllo preliminare sull'istanza. I problemi che si verificano durante il controllo preliminare sono elencati nel file pg_upgrade_precheck.log.
Se il file di log di controllo preliminare include un messaggio simile all'esempio seguente, il processo di aggiornamento non è riuscito a causa di PostGIS o delle estensioni dipendenti:
------------------------------------------------------------------Upgrade could not be run on Sun May 22 14:20:45 2022------------------------------------------------------------------ The instance could not be upgraded from 9.6.22.R1 to 12.7.R1 because of following reasons. Please take appropriate action on databases that have usages incompatible with requested major engine version upgrade and try again. - Following usages in database 'test_db' need to be corrected before upgrade: -- The instance could not be upgraded because the PostGIS extension and its dependent extensions (address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster) installation in one or more databases is not compatible with your desired upgrade path. Please upgrade postgis and its dependent extensions to version supported in requested version. ----------------------- END OF LOG ----------------------
Per verificare la versione installata di PostGIS e le sue estensioni dipendenti, esegui i seguenti comandi:
postgres=> select * FROM pg_available_extensions where name like '%postgis%'; postgres=> select * FROM pg_available_extensions where name like '%address_standardizer%'; postgres=> select probin from pg_proc where proname = 'postgis_raster_lib_version';
Il valore nella colonna installed_version mostra la versione attualmente installata dell'estensione. Se questa colonna non ha alcun valore, l'estensione non è installata.
Preparazione dell'aggiornamento delle estensioni PostGIS
Quando aggiorni un'istanza RDS per PostgreSQL, esegui le seguenti azioni:
- Esegui l'aggiornamento in più passaggi.
- Prima di aggiornare l'istanza RDS di PostgreSQL, aggiorna la versione dell'estensione in ogni passaggio.
Esegui il comando SELECT postgis_full_version(). Nell'output, controlla se ci sono estensioni in attesa di aggiornamento.
**Esempio di output con estensioni che devono essere aggiornate: **
postgres=> SELECT postgis_full_version(); postgis_full_version ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ POSTGIS="2.2.5 r15298" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" (core procs from "2.2.2 r14797" need upgrade) RASTER (raster procs from "2.2.2 r14797" need upgrade)
**Esempio di output senza estensioni che richiedono un aggiornamento: **
postgres=> SELECT postgis_full_version(); postgis_full_version ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- POSTGIS="2.3.7 r16523" PGSQL="96" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" RASTER (1 row)
Scelta della versione disponibile per un aggiornamento
Verifica che le informazioni sull'installazione e sulla versione di PostGIS nell'output della tabella del catalogo pg\ _extension corrispondano al comando SELECT postgis_full_version().
Esegui il comando seguente per verificare la prossima versione supportata per le estensioni installate nell’istanza RDS per PostgreSQL:
postgres=> SELECT name,version,installed FROM pg_catalog.pg_available_extension_versions WHERE name LIKE 'postgis%' AND version NOT LIKE ALL (array['%next%','%unpackaged%']) order by 2,1; postgres=> SELECT name,version,installed FROM pg_catalog.pg_available_extension_versions WHERE name LIKE 'address%' AND version NOT LIKE ALL (array['%next%','%unpackaged%']) order by 2,1;
Seleziona la versione più supportata disponibile per un aggiornamento.
Nota: prima di un aggiornamento del motore PostgreSQL, controlla la tabella pg\ _extension per confermare che non ci siano versioni con estensione "next", "dev" o "unpackaged". Se utilizzi una di queste versioni, è consigliabile passare prima alla versione con estensione standard.
Aggiornamento delle estensioni
Per aggiornare le estensioni, esegui uno dei seguenti comandi.
Se la versione installata di PostGIS è 2.5 o successiva, esegui il comando seguente:
SELECT postgis_extensions_upgrade();
Per aggiornare PostGIS dalla versione 2.5.x alla 3.x, esegui due volte il seguente comando:
SELECT postgis_extensions_upgrade();
Se la versione installata di PostGIS è la versione 2.4 o precedente, esegui il comando ALTER EXTENSION:
ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';
Se hai installato più moduli PostGIS, come postgis\ _topology, aggiorna singolarmente ogni modulo. L'esempio seguente mostra la procedura consigliata per aggiornare più moduli con il comando ALTER EXTENSION:
ALTER EXTENSION postgis UPDATE TO 'new-version'; ALTER EXTENSION postgis_topology UPDATE TO 'new-version'; ALTER EXTENSION postgis_tiger_geocoder UPDATE TO 'new-version';
Nota: le estensioni vengono installate a livello di database. Assicurati di aggiornare le estensioni in tutti i database in cui sono installate.
Se la versione PostGIS attualmente installata è 3.0 o successiva, è necessario aggiornare separatamente le funzioni raster. Se non utilizzi funzioni raster, esegui il comando seguente dopo avere aggiornato le estensioni:
postgres=> DROP EXTENSION postgis_raster;
Dopo avere aggiornato le estensioni, aggiorna la versione del motore RDS per PostgreSQL per le versioni con estensioni supportate.
Dopo avere aggiornato l'istanza, ripeti i passaggi per verificare la versione installata di PostGIS e le relative estensioni dipendenti.
Nota: è consigliabile aggiornare PostGIS e le sue estensioni dipendenti all'ultima versione supportata sulla versione corrente di RDS per PostgreSQL.
Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 2 anni fa