¿Cómo puedo solucionar los problemas relacionados con la extensión de PostGIS al actualizar mi instancia de RDS para PostgreSQL?
La actualización de la versión principal de mi instancia de Amazon Relational Database Service (Amazon RDS) para PostgreSQL falló debido a problemas con la extensión de PostGIS.
Descripción breve
La actualización de la versión principal de su instancia de Amazon RDS para PostgreSQL puede fallar por varios motivos. La razón más habitual es una extensión PostGIS desactualizada o extensiones dependientes. Antes de actualizar la versión principal, debe actualizar PostGIS y las extensiones dependientes. Algunas extensiones dependientes son address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology o postgis_raster.
En primer lugar, determine si la actualización de la versión principal de la instancia de RDS para PostgreSQL ha fallado debido a las extensiones. Si el problema está relacionado con las extensiones, actualice PostGIS y sus extensiones dependientes.
Resolución
Cómo comprobar si su instancia necesita actualizaciones de extensión
Para determinar si la actualización de la versión principal de la instancia de RDS para PostgreSQL ha fallado debido a las extensiones, lleve a cabo las siguientes tareas.
Consulte los eventos de la instancia. Es posible que vea un evento similar al siguiente:
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
Consulte los archivos de registro de comprobación previa de la instancia. En una actualización de versión principal, RDS para PostgreSQL lleva a cabo procedimientos de comprobación previa en la instancia. Puede encontrar los problemas que se producen durante la comprobación previa en el archivo pg_upgrade_precheck.log.
Si el archivo de registro de comprobación previa incluye un mensaje similar al del ejemplo siguiente, el proceso de actualización ha fallado debido a las extensiones de PostGIS o dependientes:
------------------------------------------------------------------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 ----------------------
Para comprobar la versión instalada de PostGIS y sus extensiones dependientes, ejecute los siguientes comandos:
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';
El valor de la columna installed_version muestra la versión instalada actualmente de la extensión. Si esta columna no tiene ningún valor, significa que la extensión no está instalada.
Cómo preparar la actualización de las extensiones de PostGIS
Cuando actualice una instancia de RDS para PostgreSQL, haga lo siguiente:
- Lleve a cabo la actualización en varios pasos.
- Antes de actualizar la instancia de RDS para PostgreSQL, actualice primero la versión de la extensión en cada paso.
Ejecute el comando SELECT postgis_full_version(). En el resultado, compruebe si hay extensiones pendientes de actualización.
Ejemplo de resultado con extensiones que deben actualizarse:
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)
Ejemplo de resultado sin extensiones que requieran una actualización:
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)
Selección de la versión que está disponible para una actualización
Confirme que la información de instalación y versión de PostGIS de la salida de la tabla de catálogo pg_extension coincida con el comando SELECT postgis_full_version().
Ejecute el siguiente comando para comprobar la próxima versión compatible para las extensiones que están instaladas en su instancia de RDS para 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;
Seleccione la versión más alta compatible que esté disponible para una actualización.
Nota: Antes de actualizar un motor PostgreSQL, consulte la tabla pg_extension para confirmar que no haya versiones de extensión «next», «dev» o «unpackaged». Si utiliza alguna de estas versiones, se recomienda pasar primero a la versión de extensión estándar.
Actualización de las extensiones
Para actualizar las extensiones, ejecute uno de los siguientes comandos.
Si la versión instalada de PostGIS es 2.5 o posterior, ejecute el siguiente comando:
SELECT postgis_extensions_upgrade();
Para actualizar PostGIS de la versión 2.5.x a la 3.x, ejecute el siguiente comando dos veces:
SELECT postgis_extensions_upgrade();
Si la versión instalada de PostGIS es la versión 2.4 o anterior, ejecute el comando ALTER EXTENSION:
ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';
Si ha instalado varios módulos PostGIS, como postgis_topology, actualice cada módulo individualmente. En el siguiente ejemplo se muestra la práctica recomendada para actualizar varios módulos con el 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: Las extensiones se instalan a nivel de base de datos. Asegúrese de actualizar las extensiones en todas las bases de datos en las que estén instaladas.
Si la versión instalada actualmente de PostGIS es 3.0 o posterior, debe actualizar las funciones de ráster por separado. Si no usa funciones de ráster, ejecute el siguiente comando después de actualizar las extensiones:
postgres=> DROP EXTENSION postgis_raster;
Después de actualizar las extensiones, actualice la versión del motor de RDS para PostgreSQL para las versiones de extensiones compatibles.
Después de actualizar la instancia, repita los pasos para comprobar la versión instalada de PostGIS y sus extensiones dependientes.
Nota: Se recomienda actualizar PostGIS y sus extensiones dependientes a la última versión compatible en su versión actual de RDS para PostgreSQL.
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años