Fidelidad en la migración

Cuando migras el esquema, los datos y los metadatos de una base de datos de origen a una base de datos de destino, debes asegurarte de que toda la información se migre con exactitud. Database Migration Service proporciona un mecanismo de alta fidelidad para migrar objetos de bases de datos (incluidos el esquema, los datos y los metadatos) de una base de datos de PostgreSQL a otra.

Durante el proceso de migración, los datos y las restricciones se migran en fases estructuradas. Los datos se migran primero durante la carga inicial de la instantánea, y las restricciones, como las claves primarias, las claves externas y los índices, se vuelven a crear en la instancia de destino después de que se completa la carga inicial.

Los siguientes componentes de datos, esquemas y metadatos se migran como parte de la migración de la base de datos:

Datos

  • Todas las tablas y los esquemas de las bases de datos seleccionadas para la migración, excepto los siguientes esquemas del sistema:

    • El esquema de información (information_schema)
    • Cualquier esquema que comience con pg_ (por ejemplo, pg_catalog, pg_toast)

    Para obtener más información sobre estos esquemas del sistema, consulta Limitaciones conocidas.

    Puedes agregar o quitar bases de datos de un trabajo de migración durante una migración en curso. Si quitas una base de datos, se detiene la replicación de esa base de datos sin borrar la base de datos ya migrada en la instancia de destino. Para obtener más información, consulta Edita un trabajo de migración.

Esquema

  • Asignación de nombres de objetos

  • Teclas principales

  • Tipos de datos

  • Posiciones ordinales de las columnas

  • Valores predeterminados

  • Nulabilidad

  • Atributos de identidad y de serie

  • Índices secundarios

Metadatos

  • Procedimientos almacenados

  • Funciones

  • Activadores

  • Vistas

  • Restricciones de clave externa

Migración continua

Los cambios en el lenguaje de manipulación de datos (DML), como las operaciones INSERT, UPDATE y DELETE en tablas con una clave primaria o una identidad de réplica, se replican automáticamente durante las migraciones continuas.

Si hay cambios en el lenguaje de definición de datos (DDL) en tu base de datos de origen durante el proceso de migración, debes actualizar la instancia de destino para que las bases de datos sigan siendo compatibles. Puedes realizar los cambios de DDL de las siguientes maneras:

  1. Ejecución manual de DDL: Detén las operaciones de escritura en la base de datos de origen, ejecuta los comandos de DDL en la base de datos de origen y ejecuta los comandos de DDL correspondientes en la base de datos de destino. Antes de ejecutar comandos de DDL en el destino, otorga el rol cloudsqlexternalsync al usuario de Cloud SQL que aplica los cambios.

  2. Comandos de DDL replicados con pglogical: Puedes usar pglogical.replicate_ddl_command para ejecutar DDL en las bases de datos de origen y de destino en un punto coherente en el flujo de replicación. El usuario que ejecuta este comando debe tener credenciales que coincidan en las instancias de origen y destino, y debe ser un superusuario o el propietario del objeto modificado.

En las siguientes pestañas, se proporcionan comandos de SQL de ejemplo para operaciones de DDL comunes con pglogical.replicate_ddl_command:

Tablas con claves primarias

Agrega una columna a una tabla con una clave primaria

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default}'
);

Cambia el nombre de una tabla con una clave primaria

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default}'
);

Crea una tabla con una clave primaria

Ejecuta los siguientes comandos en la base de datos de origen:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default']
);
SELECT pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');

Tablas sin claves primarias

Agrega una columna a una tabla sin una clave primaria

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default_insert_only}'
);

Cambia el nombre de una tabla sin clave primaria

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default_insert_only}'
);

Crea una tabla sin una clave primaria

Ejecuta los siguientes comandos en la base de datos de origen:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default_insert_only']
);
SELECT pglogical.replication_set_add_table('default_insert_only', '[SCHEMA].[TABLE_NAME]');

Qué no se migra

  • Usuarios y privilegios: No se migran las credenciales de acceso ni los roles de los usuarios. Para configurar usuarios en la instancia de destino, usa la pestaña Usuarios en la consola de Google Cloud o adminístralos con un cliente de SQL. Para obtener más información, consulta Crea y administra usuarios en la documentación de Cloud SQL.

  • Extensiones no compatibles: Database Migration Service no migra extensiones que no son compatibles con Cloud SQL. La presencia de estas extensiones no bloquea el trabajo de migración, pero las aplicaciones que hacen referencia a extensiones no compatibles pueden experimentar errores. Para obtener la lista de extensiones compatibles, consulta Extensiones de PostgreSQL en la documentación de Cloud SQL.

  • Objetos grandes: Los objetos grandes de PostgreSQL (tipo de datos oid que hace referencia a pg_largeobject) no se replican con la decodificación lógica.

  • Tablas sin claves primarias: Database Migration Service migra la instantánea inicial y replica las declaraciones INSERT durante la fase de CDC. Para las declaraciones UPDATE y DELETE:

    • Migraciones estándar: Las migraciones estándar requieren que tus tablas tengan claves primarias para replicar las declaraciones UPDATE y DELETE.

    • Migraciones de inicio rápido: Con las migraciones de inicio rápido, no se requieren claves primarias para replicar las operaciones UPDATE y DELETE si configuras la identidad de la réplica como INDEX o FULL. Configurar REPLICA IDENTITY FULL aumenta el volumen del registro de escritura anticipada (WAL) y la sobrecarga de recursos. Se recomienda agregar una clave primaria cuando sea posible. Para obtener más información, consulta la documentación de Replica Identity de PostgreSQL y la guía de migración de inicio rápido.

  • Vistas materializadas: Database Migration Service migra las definiciones de las vistas materializadas, pero no migra los datos almacenados en caché subyacentes. Para propagar vistas materializadas en el destino, ejecuta REFRESH MATERIALIZED VIEW view_name después de la migración.

  • Estados de secuencia: Los valores actuales de las secuencias (como last_value) en la instancia de destino pueden diferir del origen durante la CDC en curso. Los valores de secuencia se sincronizan durante el paso final de la promoción.

  • Espacios de tabla personalizados: Cloud SQL no admite espacios de tabla personalizados. Los objetos definidos en espacios de tabla personalizados se reasignan de forma automática al espacio de tabla pg_default predeterminado en Cloud SQL.

¿Qué sigue?