Actualización a una nueva versión principal
Databases for PostgreSQL ofrece tres vías de actualización diferentes:
- Actualización in situ a una nueva versión principal.
- Restauración a partir de una copia de seguridad.
- Actualización desde una réplica de solo lectura.
Cuando una versión principal de una base de datos se acerca a su fin de vida útil (EOL), es recomendable actualizarla a una versión principal actual.
Consulta las versiones disponibles de « Databases for PostgreSQL » en la página del catálogo de IBM Cloud, mediante el comando del complemento de la CLI de Cloud Databases ibmcloud cdb deployables-show, o en el punto final de la API de Cloud Databases /deployables.
Cuando actualices a una nueva instancia, también tendrás que modificar los datos de conexión en tu aplicación.
En los siguientes comandos de ejemplo, se requiere el CRN completo de la instancia de base de datos para la función « {id} ». Dado que el CRN contiene caracteres especiales, debe codificarse con el método « URL » para evitar un error «not_found».
Requisitos para actualizar a una versión principal más reciente de « PostgreSQL »
Antes de iniciar cualquier proceso de actualización a una versión principal, revisa todas las extensiones, los objetos de replicación y las dependencias de las aplicaciones que deban mantenerse en primer lugar.
Algunas extensiones y objetos de replicación lógica son específicos de una versión o dependen de componentes del lado del servidor que deben coincidir con la versión principal de PostgreSQL. Eliminarlos antes de la actualización ayuda a evitar fallos y te permite volver a crear únicamente los objetos compatibles una vez que la nueva versión esté en funcionamiento.
Extensiones y objetos de replicación lógica que hay que revisar
Revisa los siguientes puntos antes de la actualización:
Extensiones
pg_repackold_snapshotwal2jsonanonPostGIS
Espacios de replicación
Logical replication slots
Dependencias de las aplicaciones Si elimina extensiones u objetos de replicación de los que dependen sus aplicaciones, compruebe los flujos de datos y el comportamiento de las aplicaciones antes de continuar con la actualización. Ten en cuenta también las posibles alteraciones en la lógica de tu aplicación que dependa de funciones específicas de PostgreSQL.
pg_repack
Elimina la carpeta « pg_repack » antes de la actualización y vuelve a crearla después de la misma. « pg_repack » utiliza una extensión específica de la versión y componentes de cliente/servidor que deben coincidir
con la versión principal de « PostgreSQL ».
DROP EXTENSION pg_repack;
Vuelve a crear la extensión tras la actualización solo si tu carga de trabajo sigue necesitándola.
CREATE EXTENSION pg_repack;
old_snapshot
Elimina « old_snapshot » antes de la actualización. No Vuelve a crearlo tras actualizar a « PostgreSQL 18», ya que ya no es compatible.
DROP EXTENSION old_snapshot;
wal2json ranuras de replicación
Si utilizas « wal2json » para la decodificación lógica, debes eliminar todas las ranuras de replicación asociadas antes de la actualización. La utilidad « pg_upgrade » prohíbe terminantemente las actualizaciones de
versión principal mientras existan ranuras de replicación, y generará un error crítico y detendrá la actualización.
Antes de actualizar:
- Asegúrate de que se hayan procesado todos los datos pendientes del WAL.
- Detén la aplicación que utiliza el canal de replicación.
- Eliminar los slots de replicación:
SELECT pg_drop_replication_slot('your_slot_name');
Tras la actualización, puedes volver a crear los canales de replicación según sea necesario. Ten en cuenta que « wal2json » no se instala a través de CREATE EXTENSION, sino que se configura mediante parámetros de
la base de datos (wal_level, max_replication_slots, max_wal_senders) y permisos de tabla, lo cual no impide las actualizaciones.
anon
Desactiva la extensión « anon » antes de la actualización y vuelve a activarla después de la actualización si aún la necesitas. Es necesario realizar algunos pasos adicionales antes de dar de baja anon.
Si tienes instalada la extensión « anon », sigue los pasos que se indican a continuación y ejecuta los comandos como usuario administrador antes de realizar la actualización.
-
Elimina todas las reglas de enmascaramiento (si están activadas).
SELECT anon.remove_masks_for_all_columns(); -
Desactiva los roles ocultos (la actualización podría fallar si hay algún rol marcado como oculto).
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL; -
Elimina la extensión «
anon» con la opción «cascade».DROP EXTENSION anon CASCADE; -
Si la extensión «
anon» está instalada en varias bases de datos dentro de una instancia, sigue los pasos indicados para cada una de ellas. -
Una vez completada la actualización, vuelve a activar la extensión «
anon» y vuelve a aplicar las reglas de enmascaramiento según sea necesario.
Se recomienda encarecidamente validar los datos tanto antes como después de eliminar la extensión, para garantizar la coherencia del enmascaramiento antes de realizar la actualización.
PostGIS
Si utilizas PostGIS,, actualiza primero PostGIS antes de actualizar PostgreSQL.
SELECT postgis_extensions_upgrade();
Utiliza la siguiente consulta para comprobar que la actualización de la extensión « PostGIS » se ha realizado correctamente.
SELECT postgis_full_version();
Logical replication slots
Elimina todas las ranuras de replicación lógica antes de la actualización y vuelve a crearlas después de la misma. Las ranuras lógicas están vinculadas al estado del servidor de origen y deben volver a crearse desde cero en la instancia actualizada.
SELECT pg_drop_replication_slot('<slot_name>');
Actualizaciones de versión principal sin necesidad de reinicio
Una actualización de versión principal in situ (IPU) te permite actualizar tu implementación a una versión compatible /docs/databases-for-postgresql?topic=databases-for-postgresql-versioning-policy#version-definitions sin necesidad de restaurar una copia de seguridad en una nueva implementación. La actualización conserva las cadenas de conexión existentes, por lo que no es necesario volver a configurarlas.
No obstante, podría ser necesario realizar cambios en la aplicación si la nueva versión presenta diferencias de compatibilidad.
Durante el periodo de actualización, tu implementación sufrirá un breve periodo de inactividad. La duración depende del tamaño y la complejidad de tu implementación.
Si tus aplicaciones deben seguir leyendo datos durante la actualización, puedes crear una réplica de solo lectura en /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-provision y actualizar tu aplicación para que utilice dicha réplica. Puedes ascender la réplica a primaria si la actualización no se completa correctamente. Para obtener más información, consulta /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-ipu.
Databases for PostgreSQL No crea automáticamente copias de seguridad antes ni después de una actualización in situ a una versión principal.
Para mejorar la recuperabilidad, crea:
- Una copia de seguridad previa a la actualización para proteger el estado actual de tus datos
- Realizar una copia de seguridad inmediatamente después de la actualización para establecer el primer punto de restauración de la nueva versión
Si no realizas una copia de seguridad tras la actualización, la recuperación a un momento determinado (PITR) no estará disponible para la nueva versión hasta que finalice la siguiente copia de seguridad programada.
Las copias de seguridad y los puntos PITR creados antes de la actualización siguen estando asociados a la versión anterior y no se pueden restaurar en la versión actualizada. No obstante, aún pueden utilizarse para restaurar la versión anterior en una nueva implementación.
Espacios de replicación lógica
Elimina todas las ranuras de replicación lógica antes de la actualización y vuelve a crearlas después. Las ranuras de replicación lógica están vinculadas al estado del servidor de origen y deben volver a crearse en la instancia actualizada.
SELECT pg_drop_replication_slot('<slot_name>');
Antes de empezar
Revisa lo siguiente antes de iniciar la actualización:
-
Comprueba que tu implementación admita actualizaciones de versión mediante la interfaz de usuario, la API, la CLI o Terraform.
Ejemplo (CLI):
ibmcloud cdb capability-show versions postgresql -
Revisa los requisitos de verificación previa. La actualización se ejecuta en el entorno de origen y se bloquea si se detectan riesgos. Asegúrese de lo siguiente:
- La implementación funciona correctamente
- Hay al menos un 10 % de espacio libre disponible en el disco
- La utilización de E/S es inferior al 90 %
- El tamaño del esquema y el número de objetos se encuentran dentro de los límites admitidos
- Se ha completado la limpieza necesaria de la extensión y de los espacios de replicación lógica
-
Consulta el informe « https://www.postgresql.org/docs/release/ » para conocer los cambios de compatibilidad que puedan afectar a tus aplicaciones.
-
No se admite el cambio a una versión anterior.
-
Una actualización in situ no se puede cancelar una vez iniciada.
-
Asegúrate de que dispones de una copia de seguridad reciente antes de actualizar.
| Fuente: versión de PostgreSQL | Destino de actualización in situ compatible |
|---|---|
| 18 | Futuras versiones principales (cuando estén disponibles) |
Gen2 empieza con « PostgreSQL » 18. Las rutas de actualización a versiones más recientes se van añadiendo a medida que se incorporan. Para versiones anteriores (14-17), consulta la página /docs/databases-for-postgresql?topic=databases-for-postgresql-upgrading.
Una vez completada la actualización, tu implementación se ejecutará con una nueva versión principal de PostgreSQL. Las copias de seguridad y los puntos PITR anteriores a la actualización pertenecen a la línea temporal de la versión anterior y no se pueden restaurar en la versión actualizada.
Para mantener las funciones de restauración y PITR en la nueva versión, realiza una copia de seguridad inmediatamente después de la actualización. Esta copia de seguridad se convierte en la referencia para futuras operaciones de recuperación.
Si la actualización falla, las copias de seguridad realizadas antes de la actualización pueden seguir utilizándose con PITR para restaurar la versión anterior en una nueva implementación.
Actualización en la IU
-
Crea una implementación de prueba restaurando una copia de seguridad de tu implementación actual con la misma versión.
-
Actualiza tu aplicación de entorno de prueba para que utilice la implementación de prueba y comprueba que todo funciona correctamente.
-
Inicia la actualización desde la página « Resumen » haciendo clic en « Actualizar versión principal ».
-
Comprueba el funcionamiento de la aplicación en el entorno de pruebas actualizado.
-
Actualiza tu entorno de producción una vez finalizada la validación.
Una vez iniciada la actualización, no se puede detener ni revertir. Asegúrate de que haya una copia de seguridad reciente disponible.
El plazo de vencimiento para iniciar la actualización define el tiempo que debe transcurrir antes de que la tarea de actualización se inicie, tras lo cual se cancelará automáticamente. Establece este valor en función de tu ventana de mantenimiento. Por ejemplo, si la actualización tarda 30 minutos y el margen de tiempo es de 1 hora, configura el tiempo de caducidad en 30 minutos. El plazo de validez puede oscilar entre 5 minutos y 24 horas.
Actualización a través de la API
Utiliza la siguiente solicitud para iniciar una actualización in situ:
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"}'
Para obtener más información, consulta la API de « Cloud Databases ».
Actualización a través de la CLI
Disponible en la versión del complemento CDB >= 0.20.0.
Para ver las opciones de actualización disponibles:
ibmcloud cdb deployment-capability-show <NAME|CRN> versions
Para iniciar una actualización:
ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>
Para obtener más información sobre comando :
ibmcloud cdb deployment-version-upgrade --help
Utiliza --expire-in o --expire-at para configurar el tiempo de caducidad.
Actualización mediante Terraform
Disponible en la versión del proveedor de Terraform >= 1.79.2.
Para actualizar, modifica el valor de « version » en tu configuración.
Si no se realiza una copia de seguridad antes de una actualización, se pueden perder datos en caso de que la actualización falle. Asegúrate de que haya una copia de seguridad reciente disponible.
Aumenta el tiempo de espera si es necesario, ya que Terraform utiliza tiempos de espera en lugar de marcas de tiempo de caducidad.
Resolución de problemas
Si surgen problemas tras una actualización correcta y necesitas volver a la versión anterior, ponte en contacto con el servicio de asistencia de IBM Cloud® para que te orienten. Evita realizar operaciones PITR o restauraciones sin recibir orientación, ya que esto puede complicar la recuperación.
Las actualizaciones solo se ejecutan una vez que se hayan superado todas las comprobaciones previas. Si la actualización se bloquea, comprueba lo siguiente:
- Estado del clúster (el estado de Patroni es estable)
- Espacio libre suficiente en el disco
- Utilización aceptable de E/S de disco
- Límites de tamaño del esquema y de número de objetos
Los esquemas de gran tamaño y el elevado número de objetos pueden alargar la duración de la actualización.
Si los intentos de actualización siguen fallando, abre un ticket de asistencia a través de https://cloud.ibm.com/login?redirect=%2Funifiedsupport%2Fsupportcenter.
Actualización a partir de una réplica de solo lectura
Actualiza el sistema configurando una réplica de solo lectura. Configure una réplica de solo lectura con la misma versión de base de datos que su
implementación y espere a que se repliquen todos sus datos. Cuando la implementación y su réplica estén sincronizadas, promueva y actualice la réplica de solo lectura a una implementación completa e independiente que ejecute la nueva versión
de la base de datos. Para realizar el paso de actualización y promoción, utiliza una solicitud POST al punto de conexión /deployments/{id}/remotes/promotion indicando en el cuerpo de la solicitud la versión a la que deseas actualizar.
Esta solicitud tiene el siguiente aspecto:
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 es opcional. Si se establece en true, el nuevo despliegue no realizará una copia de seguridad inicial cuando se completa la promoción. El nuevo despliegue está disponible en menos tiempo, a expensas
de que no se realice una copia de seguridad hasta que se ejecute la siguiente copia de seguridad automática o que realice una copia de seguridad bajo demanda.
Simulacro de la promoción y actualización
Para evaluar los efectos de las actualizaciones de versión importantes, realiza una prueba de simulación. Una prueba simula la promoción y la actualización, y los resultados se registran en los registros de la base de datos. Accede y consulta los registros de tu base de datos a través de la integración de análisis de registros. Esto garantiza que la versión que está utilizando actualmente, junto con sus extensiones, se pueda actualizar correctamente a la versión deseada.
El simulacro debe ejecutarse con skip_initial_backup establecido en false y con version definido.
El comando tiene este aspecto:
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
}
}' \
Copia de seguridad y restauración de actualizaciones
Puedes actualizar la versión de tu base de datos restaurando una copia de seguridad de tus datos en una nueva implementación que ejecute la nueva versión de la base de datos.
Actualización en la IU
Actualiza a una nueva versión al restaurar una copia de seguridad desde el menú «Copias de seguridad» de tu panel de control de implementación. Haz clic en «Restaurar» en una copia de seguridad para acceder a la página de aprovisionamiento en una nueva pestaña, donde podrás modificar algunas opciones para la nueva implementación. Una de las opciones es la versión de la base de datos, que se rellena automáticamente con las versiones disponibles a las que puede actualizar. Selecciona una versión y haz clic en Crear para iniciar el proceso de aprovisionamiento y restauración.
Actualización a través de la CLI
Para actualizar y restaurar a partir de una copia de seguridad mediante la CLI de IBM Cloud, utiliza el comando de aprovisionamiento desde el controlador de recursos.
ibmcloud resource service-instance-create <DEPLOYMENT_NAME_OR_CRN> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>
Los parámetros service-name, service-id, service-plan-id y region son todos obligatorios. También debe indicar -p con los parámetros de versión y de ID de copia de seguridad
en un objeto JSON. El nuevo despliegue se dimensiona automáticamente con el mismo disco y memoria que el despliegue de origen en el momento de la copia de seguridad.
Este mandato tiene el aspecto siguiente:
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
}'
Actualización a través de la API
Sigue los pasos necesarios para utilizar la API del controlador de recursos antes de utilizarla para actualizar a partir de
una copia de seguridad. A continuación, envía una solicitud POST a la API. Los parámetros name, target, resource_group y resource_plan_id son obligatorios. También debe indicar
la versión y el ID de copia de seguridad. El nuevo despliegue tiene la misma asignación de memoria y de disco que el despliegue de origen en el momento de la copia de seguridad.
Este mandato tiene el aspecto siguiente:
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
}'
Actualización forzada
Una vez pasada la fecha de fin de vida útil, todas las implementaciones activas de « Databases for PostgreSQL » que ejecuten una versión obsoleta se actualizarán automáticamente a la siguiente versión compatible. Por ejemplo, « PostgreSQL » 13 (obsoleta) se actualiza a la versión 14.
Actualiza antes de la fecha de fin de vida útil para evitar los siguientes riesgos:
- No se ofrecen acuerdos de nivel de servicio (SLA) para este tipo de actualización forzada.
- Es posible que se produzca alguna pérdida de datos.
- Es posible que su aplicación sufra un periodo de inactividad prolongado.
- Es posible que tu aplicación deje de funcionar si no es compatible con la nueva versión.
- No puedes controlar cuándo se llevará a cabo esta actualización en tu implementación.
- No existe ningún proceso para revertir esta actualización forzada.
Para conocer las fechas de fin de vida útil, consulta la página página de política de versiones.
Problemas con los privilegios de los roles durante las actualizaciones de versión
A partir de la versión 16 de « PostgreSQL », la aplicación de los privilegios de los roles es más estricta. Se trata de un cambio arquitectónico en PostgreSQL, no de un cambio de comportamiento específico de IBM®. En versiones anteriores, los
roles con el atributo « CREATEROLE » podían gestionar otros roles de forma más amplia. En « PostgreSQL » 16 y versiones posteriores, un rol debe tener el derecho « ADMIN OPTION » sobre otro rol para poder concederlo
o revocarlo. Para obtener más información, consulta las notas de la versión 16 de « PostgreSQL », los atributos de los roles y el documento « GRANT » sobre los roles.
Si vas a actualizar de PostgreSQL 15 o una versión anterior a PostgreSQL 16 o una versión posterior, revisa los permisos de tus roles antes de iniciar la actualización in situ (IPU). Si la gestión de roles debe continuar tras la actualización, asegúrate de que los roles necesarios se concedan con la opción WITH ADMIN OPTION antes de iniciar la actualización.
Si se producen errores relacionados con los privilegios tras la actualización, por ejemplo:
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"
Utiliza la función auxiliar integrada grant_admin_option_to_roles para restablecer ADMIN OPTION para roles específicos:
- Esto solo se aplica a las bases de datos actualizadas desde PostgreSQL v15 y versiones anteriores a PostgreSQL 16 y posteriores (si te aparece el error descrito anteriormente).
- Acepta una lista arbitraria de roles a los que aplicar la corrección.
- Solo puede ser ejecutado por el
admin user. - Se puede ejecutar varias veces sin problemas (es idempotente).
Uso de ejemplo:
SELECT grant_admin_option_to_roles('role1', 'role2', 'role3');
Esta función concede los roles especificados (role1, role2, role3) al usuario admin con ADMIN OPTION, lo que permite al usuario admin gestionar (conceder, revocar,
modificar o eliminar) dichos roles en las instancias actualizadas.
Registro de cambios para las versiones principales de PostgreSQL
Para obtener información sobre versiones anteriores de « PostgreSQL » (14-17), consulta el registro de cambios de « Gen1 ».