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.
- El esquema de informació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:
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
cloudsqlexternalsyncal usuario de Cloud SQL que aplica los cambios.Comandos de DDL replicados con
pglogical: Puedes usarpglogical.replicate_ddl_commandpara 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
oidque hace referencia apg_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
INSERTdurante la fase de CDC. Para las declaracionesUPDATEyDELETE:Migraciones estándar: Las migraciones estándar requieren que tus tablas tengan claves primarias para replicar las declaraciones
UPDATEyDELETE.Migraciones de inicio rápido: Con las migraciones de inicio rápido, no se requieren claves primarias para replicar las operaciones
UPDATEyDELETEsi configuras la identidad de la réplica comoINDEXoFULL. ConfigurarREPLICA IDENTITY FULLaumenta 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_namedespué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_defaultpredeterminado en Cloud SQL.
¿Qué sigue?
Para obtener detalles completos sobre las limitaciones, consulta Limitaciones conocidas.
Para comenzar con una explicación de la migración, consulta Comienza a usar las migraciones de Cloud SQL para PostgreSQL.