Utilice el método de actualización en el lugar para actualizar la versión principal del motor de una instancia de ApsaraDB RDS for PostgreSQL directamente sobre la instancia existente mediante pg_upgrade. Todos los metadatos, incluida la información de configuración y facturación, se conservan después de la actualización.
Para comparar todos los métodos de actualización disponibles, consulte Introduction to major version upgrade methods.
Requisitos previos
Antes de empezar, asegúrese de que:
La instancia ejecuta ApsaraDB RDS for PostgreSQL 16 o una versión anterior.
El tipo de almacenamiento es disco en la nube.
El método de facturación es pay-as-you-go o suscripción.
La instancia no es una read-only instance ni una instancia de clúster dedicado.
Babelfish no está habilitado. El número de versión menor del motor no termina con
babelfish.
Las instancias con discos locales de alto rendimiento y las instancias serverless no admiten el método de actualización en el lugar. Utilice el
en su lugar.
Facturación
Sin costo.
Notas de uso
Revise la siguiente información antes de iniciar la actualización.
Impacto en el servicio
Durante el cambio, la instancia entra en un estado de solo lectura y puede producirse una interrupción transitoria de la conexión que dura varios minutos. Realice la actualización fuera del horario pico.
La duración del estado de solo lectura depende del número de objetos de la base de datos. Ejecute el siguiente comando para comprobar la cantidad:
SELECT count(1) FROM pg_class;
Si la cantidad es de millones, el estado de solo lectura puede durar decenas de minutos o incluso horas.
Si el tipo de instancia no cumple con las especificaciones recomendadas, el sistema lo actualiza automáticamente durante la actualización de versión. Esto provoca un estado adicional de solo lectura que dura varios minutos y una interrupción transitoria de la conexión de unos pocos segundos. Resuelva cualquier alerta de tipo de instancia en la major version upgrade check report antes de continuar.
Slots de replicación
Si la instancia es un publicador con slots de replicación, estos se pierden después de la actualización.
Si la instancia es un suscriptor con slots de replicación, puede producirse una apropiación de slots durante la actualización, lo que causa inconsistencia en los datos. Consulte How do I prevent data inconsistency caused by replication slot preemption during an upgrade?
Cambios de parámetros
Los parámetros no compatibles con la versión de destino se eliminan automáticamente.
Los parámetros con valores fuera del rango válido para la versión de destino se restablecen al valor predeterminado en la plantilla de parámetros de esa versión.
El sistema establece temporalmente
statement_timeouten0durante la actualización y lo restaura a su valor original una vez que esta finaliza.
Otras consideraciones
Tareas de DTS: Si la instancia es origen o destino de Data Transmission Service (DTS), vuelva a crear la tarea de DTS después de la actualización.
Compatibilidad de plugins: La actualización lleva la instancia a la versión menor más reciente del motor de forma automática, lo que puede causar problemas de compatibilidad con los plugins.
Copia de seguridad de la instancia: Se realiza una copia de seguridad completa antes y después de la actualización para permitir la recuperación basada en clones.
Paso 1: Ejecutar una comprobación previa a la actualización
Inicie sesión en la consola de ApsaraDB RDS. En la barra de navegación superior, seleccione la región donde reside la instancia. Busque el ID de la instancia y haga clic en él.
-
(Opcional) Si la instancia tiene instancias de solo lectura, cambie el endpoint de la aplicación del endpoint de la instancia de solo lectura al endpoint de la instancia principal y luego elimine las instancias de solo lectura.
NotaCambie el endpoint de la aplicación fuera del horario pico para minimizar el impacto en el servicio.
-
En el panel de navegación izquierdo, haga clic en Major Version Upgrade.
NotaSi
Major Version Upgrade
no aparece, compruebe la versión y la configuración de su instancia. Para obtener más información, consulte
.
En la pestaña Upgrade Check, haga clic en Create upgrade check report.
Seleccione la versión de destino, establezca Upgrade Mode en Local Upgrade y haga clic en OK. El estado de la instancia cambia a Maintaining Instance mientras se ejecuta la comprobación y vuelve a Running cuando esta finaliza.
-
Revise los resultados de la comprobación:
Success o Warning: continúe con el paso 2.
Failed: haga clic en View Information, corrija los problemas identificados en el informe y vuelva a ejecutar la comprobación. Para obtener detalles sobre errores comunes, consulte Interpret an ApsaraDB RDS for PostgreSQL major version upgrade check report.
ImportanteSi el resultado es Warning, corrija los problemas y vuelva a ejecutar la comprobación hasta que el resultado sea Success. - Si crea un plugin en la instancia principal después de que la comprobación se complete correctamente, ejecute la comprobación nuevamente.
Paso 2: Actualizar la versión principal del motor
Haga clic en la pestaña Upgrade Instance. Lea las advertencias, seleccione la versión de actualización y haga clic en Create Upgrade Task.
En el cuadro de diálogo, lea el mensaje y haga clic en OK.
-
En la sección Create Major Engine Version Upgrade Task, establezca Upgrade Mode en Local Upgrade y configure Cutover time:
immediately: el cambio ocurre inmediatamente después de que finaliza la migración.
Instance operation and maintenance time: el cambio ocurre dentro de la maintenance window configurada.
-
Haga clic en Create now. El estado de la instancia cambia a Migration in Progress cuando comienza la tarea de actualización. La duración depende del número de objetos de la base de datos. Puede seguir el progreso en Task Hub.
ImportanteLas tareas de actualización no se pueden modificar ni eliminar después de su creación. - Mientras la instancia esté en estado Migration in Progress, operaciones como modificar parámetros, reiniciar o liberar la instancia no están disponibles.
-
La actualización se completa cuando tanto la instancia de origen como la de destino muestran el estado Running.
NotaEn la pestaña
Upgrade History
, haga clic en
View Information
en la columna
Upgrade Log
para ver la duración del estado de solo lectura y el registro detallado de la actualización. La duración del estado de solo lectura es el tiempo transcurrido entre
Cutover Time
y
Cutover End Time
, sin incluir el período de limpieza de la caché DNS.
Pasos siguientes
Si eliminó instancias de solo lectura antes de la actualización:
Create read-only instances en la instancia de destino.
En su aplicación, actualice el endpoint para que apunte a la nueva instancia de solo lectura.
Referencia de resultados de actualización
La columna Upgrade Result en la pestaña Upgrade History muestra uno de los siguientes estados:
|
Resultado de la actualización |
Estado de la instancia |
Significado |
|
Running |
Migration in Progress |
La tarea de actualización se está ejecutando. |
|
Succeeded |
Running |
La tarea de actualización se completó correctamente. |
Referencia de API
|
Operación de API |
Descripción |
|
Ejecuta una comprobación previa para una actualización de versión principal del motor. |
|
|
Consulta el informe de la comprobación previa a la actualización. |
|
|
Actualiza la versión principal del motor. |
|
|
Consulta el historial de tareas de actualización de versión principal del motor. |
Referencias
Preguntas frecuentes
¿Puedo modificar la instancia durante una actualización de versión principal del motor?
No. Espere a que finalice la actualización antes de realizar cambios en la instancia.
¿Se admiten actualizaciones automáticas de versión principal del motor?
No. Las actualizaciones de versión principal del motor deben iniciarse manualmente.
¿Se admiten reducciones de versión principal del motor?
No. Para ejecutar una versión inferior, adquiera una nueva instancia en la versión objetivo y utilice DTS para migrar los datos.
Después de la actualización, obtengo un error de conflicto raster_overviews al crear una vista. ¿Cómo lo soluciono?
Esto afecta a versiones de PostGIS anteriores a la 2.5.2 en PostgreSQL 10 u 11 al actualizar a PostgreSQL 12. Siga estos pasos:
-
En la instancia de origen, actualice el plugin PostGIS. Ejecute el siguiente comando dos veces para asegurarse de que se complete correctamente:
SELECT PostGIS_Extensions_Upgrade(); SELECT PostGIS_Extensions_Upgrade(); Elija la solución según si utiliza el plugin PostGIS Raster.
Si utiliza PostGIS Raster:
-
En la instancia de origen, elimine la vista
raster_overviewsde la extensión y reemplácela con un marcador de posición:ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews; CREATE OR REPLACE VIEW raster_overviews AS SELECT 1; Actualice la instancia de PostgreSQL a PostgreSQL 12 como mínimo.
-
En la instancia de destino, vuelva a crear la vista completa y agréguela nuevamente a la extensión:
CREATE OR REPLACE VIEW raster_overviews AS SELECT current_database() AS o_table_catalog, n.nspname AS o_table_schema, c.relname AS o_table_name, a.attname AS o_raster_column, current_database() AS r_table_catalog, split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name AS r_table_schema, split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name AS r_table_name, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_raster_column, trim(both from split_part(s.consrc, ',', 2))::integer AS overview_factor FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, ( SELECT connamespace, conrelid, conkey, pg_get_constraintdef(oid) AS consrc FROM pg_constraint ) AS s WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND c.relkind = ANY(ARRAY['r'::char, 'v'::char, 'm'::char, 'f'::char]) AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.consrc LIKE '%_overview_constraint(%' AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege(c.oid, 'SELECT'::text); ALTER EXTENSION PostGIS_Raster ADD VIEW raster_overviews;
Si no utiliza PostGIS Raster:
-
En la instancia de origen, elimine la extensión:
DROP EXTENSION PostGIS_Raster; Actualice la instancia de PostgreSQL a PostgreSQL 12 como mínimo.
¿Cómo evito la inconsistencia de datos causada por la apropiación de slots de replicación durante una actualización?
Elija uno de los siguientes enfoques según dónde desee que residan los datos de la suscripción después de la actualización.
Mantener los datos de la suscripción en la instancia de origen:
Asegúrese de que la instancia de origen no se caiga debido a una carga excesiva durante la actualización. Si esto ocurre, la instancia de destino podría apropiarse del slot de replicación, lo que causaría inconsistencia en los datos. Después de la actualización, deshabilite la suscripción en la base de datos de destino:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;
Mover los datos de la suscripción a la instancia de destino:
Antes de la actualización, deshabilite la suscripción en la instancia de origen:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;
Después de la actualización, habilite la suscripción en la instancia de destino:
\c your_database
ALTER SUBSCRIPTION your_subscription_name ENABLE;
Para obtener más información sobre los slots de replicación, consulte
y
. Si omite estos pasos, consulte la siguiente pregunta frecuente para saber cómo solucionar la inconsistencia de datos de la suscripción.
¿Cómo soluciono la inconsistencia de datos de la suscripción después de una actualización?
En la instancia de destino (versión superior), elimine los datos de la tabla afectada. Luego, vuelva a crear la suscripción con
copy_data=true. Para obtener más detalles, consulte ALTER SUBSCRIPTION.-
Utilice
ON CONFLICTpara importar los datos de la instancia de origen (versión inferior) al destino. El siguiente ejemplo muestra el patrón:CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT); INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a'); INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b'); INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c'); -- Newer timestamp: update the existing row INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- Older timestamp: skip the row INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- New row: insert INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t;
¿Por qué necesito eliminar las instancias de solo lectura antes de una actualización de versión principal del motor?
Los nodos de solo lectura y sus slots de replicación permanecen vinculados a la instancia de origen después de la actualización y no se transfieren automáticamente a la instancia de destino. Elimínelos antes de la actualización y vuélvalos a crear en la instancia de destino posteriormente.