Uso de una base de datos de PostgreSQL como un origen de AWS DMS - AWS Database Migration Service

Uso de una base de datos de PostgreSQL como un origen de AWS DMS

Puede migrar datos desde una o varias bases de datos de PostgreSQL con AWS DMS. Con una base de datos de PostgreSQL como origen, podrá migrar datos a otra base de datos de PostgreSQL o a una de las bases de datos compatibles.

Para obtener información sobre las versiones de PostgreSQL que AWS DMS admite como origen, consulte Orígenes para AWS DMS.

AWS DMS admite PostgreSQL para estos tipos de bases de datos:

  •  Bases de datos en las instalaciones

  • Bases de datos en una instancia de Amazon EC2

  • Bases de datos en una instancia de base de datos de Amazon RDS

  • Bases de datos de una instancia de base de datos basada en Amazon Aurora PostgreSQL-Compatible Edition

  • Bases de datos de una instancia de base de datos basada en Amazon Aurora PostgreSQL-Compatible Serverless Edition

nota

DMS es compatible con Amazon Aurora PostgreSQL - Serverless V1 como origen solo para carga completa. Sin embargo, puede usar Amazon Aurora PostgreSQL - Serverless V2 como origen para tareas de carga completa, carga completa + CDC y solo CDC.

Versión de origen de PostgreSQL

Versión de AWS DMS que se debe usar

9.x, 10.x, 11.x, 12.x

Utilice cualquier versión disponible de AWS DMS.

13.x

Use la versión 3.4.3 y superiores de AWS DMS.

14.x

Use la versión 3.4.7 y superiores de AWS DMS.

15.x

Use la versión 3.5.1 y superiores de AWS DMS.

16.x

Use la versión 3.5.3 y posteriores de AWS DMS.

Puede utilizar las capas de conexión segura (SSL) para cifrar las conexiones entre el punto de conexión de PostgreSQL y la instancia de replicación. Para obtener más información sobre el uso de SSL con un punto de enlace de PostgreSQL, consulte Uso de SSL con AWS Database Migration Service.

Como requisito de seguridad adicional cuando se utiliza PostgreSQL como origen, la cuenta de usuario especificada debe ser un usuario registrado en la base de datos de PostgreSQL.

Para configurar una base de datos de PostgreSQL como un punto de conexión de origen de AWS DMS, haga lo siguiente:

Trabajar con bases de datos de PostgreSQL autoadministradas como origen en AWS DMS

Con una base de datos de PostgreSQL autoadministrada como origen, puede migrar datos a otra base de datos de PostgreSQL o a una de las bases de datos de destino compatibles con AWS DMS. El origen de la base de datos puede estar en una base de datos en las instalaciones o un motor autoadministrado en ejecución en una instancia de Amazon EC2. Puede utilizar una instancia de base de datos tanto para tareas de carga completa como para la captura de datos de cambios (CDC).

Requisitos previos para utilizar una base de datos de PostgreSQL autoadministrada como origen de AWS DMS

Antes de migrar datos desde una base de datos de origen de PostgreSQL autoadministrada, haga lo siguiente:

  • Asegúrese de utilizar una base de datos de PostgreSQL versión 9.4.x o superiores.

  • Para las tareas de carga completa más CDC o tareas exclusivas de CDC, debe conceder permisos de superusuario para la cuenta de usuario especificada para la base de datos de origen de PostgreSQL. La cuenta de usuario necesita permisos de superusuario para acceder a funciones específicas de replicación en el origen. Para las tareas exclusivas de carga completa, la cuenta del usuario necesita permisos SELECT en las tablas para poder migrarlas.

  • Agregue la dirección IP del servidor de replicación AWS DMS al archivo de configuración pg_hba.conf y habilite las conexiones de socket y replicación. Ejemplo:

    # Replication Instance host all all 12.3.4.56/00 md5 # Allow replication connections from localhost, by a user with the # replication privilege. host replication dms 12.3.4.56/00 md5

    El archivo de configuración de PostgreSQL pg_hba.conf controla la autenticación del cliente. (HBA significa autenticación basada en host). El archivo se almacena tradicionalmente en el directorio de datos del clúster de bases de datos.

  • Si va a configurar una base de datos como origen de replicación lógica con AWS DMS, consulte Habilitación de CDC con una base de datos de PostgreSQL autoadministrada como origen de AWS DMS

nota

Algunas transacciones de AWS DMS están inactivas durante un tiempo antes de que el motor de DMS las utilice de nuevo. Al usar el parámetro idle_in_transaction_session_timeout en PostgreSQL versiones 9.6 y superiores, puede provocar transacciones inactivas en el tiempo de espera y que se devuelva un error. No finalice las transacciones inactivas cuando utilice AWS DMS.

Habilitación de CDC con una base de datos de PostgreSQL autoadministrada como origen de AWS DMS

AWS DMS admite la captura de datos de cambios (CDC) mediante replicación lógica. Para habilitar la replicación lógica en una base de datos de origen de PostgreSQL autoadministrada, establezca los siguientes parámetros y valores en el archivo de configuración postgresql.conf:

  • Configurar wal_level = logical.

  • Defina max_replication_slots en un valor mayor de 1.

    Establezca el valor max_replication_slots en función del número de tareas que desea ejecutar. Por ejemplo, para ejecutar cinco tareas debe establecer un mínimo de cinco ranuras. Las ranuras se abrirán automáticamente en cuanto se inicie una tarea y permanecerán abiertas incluso cuando la tarea ya no se esté ejecutando. Asegúrese de eliminar manualmente las ranuras abiertas. Tenga en cuenta que DMS elimina automáticamente las ranuras de replicación cuando se elimina la tarea, si DMS creó la ranura.

  • Defina max_wal_senders en un valor mayor de 1.

    El parámetro max_wal_senders establece el número de tareas simultáneas que pueden ejecutarse.

  • El parámetro wal_sender_timeout termina la replicación de conexiones que están inactivas durante más tiempo de los milisegundos especificados. El valor predeterminado para una base de datos de PostgreSQL en las instalaciones es 60 000 milisegundos (60 segundos). Si se establece el valor en 0 (cero), se desactiva el mecanismo de tiempo de espera y es una configuración válida para la DMS.

    Si se establece wal_sender_timeout en un valor distinto de cero, una tarea de DMS con CDC requiere un mínimo de 10 000 milisegundos (10 segundos) y se produce un error si el valor es inferior a 10 000. Mantenga el valor en menos de 5 minutos para evitar retrasos durante una conmutación por error de Multi-AZ de una instancia de replicación de DMS.

Algunos parámetros son estáticos y solo se pueden configurar al iniciar el servidor. Los cambios en las entradas en el archivo de configuración (para una base de datos autoadministrada) o en el grupo de parámetros de base de datos (para una base de datos de RDS para PostgreSQL) se ignoran hasta que se reinicie el servidor. Para obtener más información, consulte la documentación de PostgreSQL.

Para obtener más información acerca de la habilitación de CDC, consulte Habilitación de la captura de datos de cambios (CDC) mediante replicación lógica.

Trabajo con bases de datos de PostgreSQL administradas por AWS como un origen de DMS

Puede utilizar una instancia de base de datos de PostgreSQL administrada por AWS como origen para AWS DMS. Puede realizar tanto tareas de carga completa como tareas de captura de datos de cambios (CDC) mediante un origen de PostgreSQL administrado por AWS.

Requisitos previos para utilizar una base de datos de PostgreSQL administrada por AWS como origen de DMS

Antes de migrar datos desde una base de datos de origen de PostgreSQL administrada por AWS, haga lo siguiente:

  • Le recomendamos que utilice una cuenta de usuario de AWS con los permisos mínimos necesarios para la instancia de base de datos de PostgreSQL como cuenta de usuario para el punto de conexión de origen de PostgreSQL para AWS DMS. No se recomienda el uso de la cuenta principal. La cuenta debe tener el rol rds_superuser y el rol rds_replication. El rol de rds_replication concede permisos para administrar ranuras lógicas y para transmitir datos mediante ranuras lógicas.

    Asegúrese de crear varios objetos a partir de la cuenta de usuario principal para la cuenta que utilice. Para obtener información sobre la creación de estos, consulte Migración de una base de datos de Amazon RDS para PostgreSQL sin usar la cuenta de usuario principal.

  • Si la base de datos de origen está en una nube privada virtual (VPC), elija el grupo de seguridad de la VPC que proporciona acceso a la instancia de base de datos donde reside la base de datos. Esto es necesario para que la instancia de replicación de DMS se conecte correctamente a la instancia de base de datos de origen. Cuando la base de datos y la instancia de replicación de DMS estén en la misma VPC, agregue el grupo de seguridad adecuado a sus propias reglas de entrada.

nota

Algunas transacciones de AWS DMS están inactivas durante un tiempo antes de que el motor de DMS las utilice de nuevo. Al usar el parámetro idle_in_transaction_session_timeout en PostgreSQL versiones 9.6 y superiores, puede provocar transacciones inactivas en el tiempo de espera y que se devuelva un error. No finalice las transacciones inactivas cuando utilice AWS DMS.

Habilitación de CDC con una instancia de base de datos de PostgreSQL administrada por AWS con AWS DMS

AWS DMS admite la CDC en bases de datos de PostgreSQL de Amazon RDS cuando la instancia de base de datos se configura para utilizar la replicación lógica. La siguiente tabla resume la compatibilidad de replicación lógica de cada versión de PostgreSQL administrada por AWS.

No puede usar las réplicas de lectura de RDS PostgreSQL para CDC (replicación continua).

Versión de PostgreSQL

Compatibilidad de carga completa de AWS DMS

Compatibilidad con AWS DMS CDC

Aurora PostgreSQL versión 2.1 con compatibilidad de PostgreSQL 10.5 (o inferior)

No

Aurora PostgreSQL versión 2.2 con compatibilidad de PostgreSQL 10.6 (o superiores)

RDS para PostgreSQL compatible con PostgreSQL 10.21 (o superiores)

Para habilitar la replicación lógica en una instancia de base de datos de RDS para PostgreSQL
  1. Utilice la cuenta de usuario principal de AWS de la instancia de base de datos de PostgreSQL como la cuenta de usuario del punto de conexión de origen de PostgreSQL. La cuenta de usuario principal dispone de los roles necesarios que le permiten configurar la CDC.

    Si utiliza una cuenta que no sea la cuenta de usuario principal, asegúrese de crear varios objetos desde la cuenta principal para la cuenta que utilice. Para obtener más información, consulte Migración de una base de datos de Amazon RDS para PostgreSQL sin usar la cuenta de usuario principal.

  2. Establezca en 1 el parámetro rds.logical_replication en el grupo de parámetros de CLÚSTER de la base de datos. Para que este parámetro estático surta efecto, es necesario reiniciar la instancia de base de datos. Como parte de la aplicación de este parámetro, AWS DMS establece los parámetros wal_level, max_wal_senders, max_replication_slots y max_connections. Estos cambios de parámetros pueden aumentar la generación de registros de escritura anticipada (WAL), así que solo debe establecer rds.logical_replication cuando utilice ranuras de replicación lógica.

  3. El parámetro wal_sender_timeout termina la replicación de conexiones que están inactivas durante más tiempo de los milisegundos especificados. El valor predeterminado para una base de datos de PostgreSQL administrada por AWS es 30 000 milisegundos (30 segundos). Si se establece el valor en 0 (cero), se desactiva el mecanismo de tiempo de espera y es una configuración válida para la DMS.

    Si se establece wal_sender_timeout en un valor distinto de cero, una tarea de DMS con CDC requiere un mínimo de 10 000 milisegundos (10 segundos) y se produce un error si el valor está entre 0 y 10 000. Mantenga el valor en menos de 5 minutos para evitar retrasos durante una conmutación por error de Multi-AZ de una instancia de replicación de DMS.

  4. Asegúrese de que el valor del parámetro max_worker_processes del grupo de parámetros del clúster de base de datos sea igual o superior a los valores totales combinados de max_logical_replication_workers, autovacuum_max_workers y max_parallel_workers. Un número elevado de procesos de trabajo en segundo plano podría afectar a las cargas de trabajo de las aplicaciones en instancias pequeñas. Por lo tanto, monitoree el rendimiento de la base de datos si establece max_worker_processes encima del valor predeterminado.

  5. Cuando utilice Aurora PostgreSQL como origen con CDC, establezca synchronous_commit en ON.

Migración de una base de datos de Amazon RDS para PostgreSQL sin usar la cuenta de usuario principal

En algunos casos, es posible que no utilice la cuenta de usuario principal para la instancia de base de datos de Amazon RDS PostgreSQL que está utilizando como origen. En estos casos, se crean varios objetos para capturar los eventos del lenguaje de definición de datos (DDL). Puede crear estos objetos en una cuenta que no sea la cuenta principal y, a continuación, crear un activador en la cuenta de usuario principal.

nota

Si establece la configuración de punto de conexión de CaptureDdls en false en el punto de conexión de origen, no tendrá que crear la tabla y el desencadenador siguientes en la base de datos de origen.

Utilice el siguiente procedimiento para crear estos objetos.

Para crear objetos
  1. Elija el esquema donde deben crearse los objetos. El esquema predeterminado es public. Asegúrese de que el esquema exista y que la cuenta OtherThanMaster pueda obtener acceso a él.

  2. Inicie sesión en la instancia de base de datos de PostgreSQL con una cuenta de usuario distinta de la cuenta maestra, aquí la cuenta de OtherThanMaster.

  3. Cree la tabla awsdms_ddl_audit mediante la ejecución del siguiente comando, sustituyendo objects_schema en el código siguiente por el nombre del esquema que se va a utilizar.

    CREATE TABLE objects_schema.awsdms_ddl_audit ( c_key bigserial primary key, c_time timestamp, -- Informational c_user varchar(64), -- Informational: current_user c_txn varchar(16), -- Informational: current transaction c_tag varchar(24), -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE' c_oid integer, -- For future use - TG_OBJECTID c_name varchar(64), -- For future use - TG_OBJECTNAME c_schema varchar(64), -- For future use - TG_SCHEMANAME. For now - holds current_schema c_ddlqry text -- The DDL query associated with the current DDL event );
  4. Cree la función awsdms_intercept_ddl. Para ello, ejecute el siguiente comando y sustituya objects_schema en el código siguiente por el nombre del esquema que se va a utilizar.

    CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl() RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS $$ declare _qry text; BEGIN if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then SELECT current_query() into _qry; insert into objects_schema.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete from objects_schema.awsdms_ddl_audit; end if; END; $$;
  5. Cierre sesión en la cuenta OtherThanMaster e inicie sesión con una cuenta que tenga el rol rds_superuser asignado.

  6. Cree el activador de eventos awsdms_intercept_ddl; para ello, ejecute el siguiente comando.

    CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
  7. Asegúrese de que todos los usuarios y roles que acceden a estos eventos tengan los permisos de DDL necesarios. Por ejemplo:

    grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public;

Cuando haya completado el procedimiento anterior, puede crear el punto de enlace de origen de AWS DMS utilizando la cuenta OtherThanMaster.

nota

Estos eventos se desencadenan mediante instrucciones CREATE TABLE, ALTER TABLE y DROP TABLE.

Habilitación de la captura de datos de cambios (CDC) mediante replicación lógica

Puede utilizar la característica de replicación lógica nativa de PostgreSQL para habilitar la captura de datos de cambios (CDC) durante la migración de bases de datos para orígenes de PostgreSQL. Puede utilizar esta característica con una instancia de base de datos SQL de PostgreSQL autoadministrada y también con una instancia de base de datos SQL de Amazon RDS para PostgreSQL. Este enfoque reduce el tiempo de inactividad y le ayuda a asegurar que la base de datos de destino esté sincronizada con la base de datos de PostgreSQL de origen.

AWS DMS admite CDC para tablas de PostgreSQL con claves principales. Si una tabla no tiene una clave principal, los registros de escritura anticipada (WAL) no incluyen una imagen anterior de la fila de la base de datos. En este caso, DMS no puede actualizar la tabla. En este caso, puede utilizar opciones de configuración adicionales y utilizar la identidad de réplica de la tabla como solución alternativa. Sin embargo, este enfoque puede generar registros adicionales. Le recomendamos que utilice la identidad de réplica de la tabla como solución alternativa solo después de realizar pruebas exhaustivas. Para obtener más información, consulte Ajustes de configuración adicionales al utilizar una base de datos de PostgreSQL como origen de DMS.

nota

REPLICA IDENTITY FULL es compatible con un complemento de decodificación lógica, pero no con un complemento pglogical. Para obtener más información, consulte la documentación de pglogical.

Para tareas de carga completa y CDC y solo de CDC, AWS DMS utiliza ranuras de replicación lógica para retener los registros de WAL para la replicación hasta que se decodifiquen. Cuando se reinicia (no se reanuda) durante una tarea de carga completa y CDC o una tarea de CDC, se vuelve a crear la ranura de replicación.

nota

Para la decodificación lógica, DMS utiliza el complemento test_decocoding o pglogical. Si el complemento pglogical está disponible en una base de datos de PostgreSQL de origen, DMS crea una ranura de replicación con pglogical, de lo contrario se utiliza un complemento test_decoding. Para obtener más información acerca del complemento test_decoding, consulte la documentación de PostgreSQL.

Si el parámetro de la base de datos max_slot_wal_keep_size está establecido en un valor que no es el predeterminado y el tamaño restart_lsn de la ranura de replicación es inferior al LSN actual, la tarea de DMS no se realizará correctamente debido a la eliminación de los archivos WAL necesarios.

Configuración del complemento pglogical

Implementado como una extensión de PostgreSQL, el complemento pglogical es un sistema y modelo de replicación lógica para la replicación selectiva de datos. La siguiente tabla identifica las versiones de base de datos PostgreSQL de origen que admiten el complemento pglogical.

Origen de PostgreSQL

Admite pglogical

PostgreSQL 9.4 o superiores autoadministrado

Amazon RDS PostgreSQL 9.5 o versiones anteriores

No

Amazon RDS PostgreSQL 9.6 o versiones superiores

Aurora PostgreSQL 1.x hasta 2.5.x

No

Aurora PostgreSQL 2.6.x o versiones superiores

Aurora PostgreSQL 3.3.x o versiones superiores

Antes de configurar pglogical para su uso con AWS DMS, habilite primero la replicación lógica para la captura de datos de cambios (CDC) en la base de datos de origen PostgreSQL.

Una vez habilitada la replicación lógica en la base de datos de origen PostgreSQL, siga los siguientes pasos para configurar pglogical para su uso con DMS.

Uso del complemento pglogical para la replicación lógica en una base de datos de origen PostgreSQL con AWS DMS
  1. Cree una extensión pglogical en la base de datos PostgreSQL de origen:

    1. Establezca el parámetro correcto:

      • Para las bases de datos PostgreSQL autoadministradas, establezca el parámetro shared_preload_libraries= 'pglogical' de la base de datos.

      • Para las bases de datos PostgreSQL en Amazon RDS y Amazon Aurora PostgreSQL-Compatible Edition, establezca el parámetro shared_preload_libraries en pglogical en el mismo grupo de parámetros de RDS.

    2. Reinicie la base de datos de origen de PostgreSQL.

    3. En la base de datos PostgreSQL, ejecute el comando, create extension pglogical;

  2. Ejecute el siguiente comando para comprobar que pglogical se ha instalado correctamente:

    select * FROM pg_catalog.pg_extension

Ahora puede crear una tarea de AWS DMS que realice la captura de datos de cambios para el punto de conexión de la base de datos de origen de PostgreSQL.

nota

Si no habilita pglogical en la base de datos de origen de PostgreSQL, AWS DMS utiliza el complemento test_decoding de forma predeterminada. Cuando pglogical está habilitado para la decodificación lógica, AWS DMS usa pglogical de forma predeterminada. Pero puede configurar el atributo de conexión adicional PluginName para usar el complemento test_decoding en su lugar.

Uso de puntos de inicio de CDC nativo para configurar una carga de CDC de un origen de PostgreSQL

Para habilitar puntos de inicio de CDC nativos con PostgreSQL como origen, establezca el atributo de conexión adicional slotName en el nombre de una ranura de replicación lógica existente al crear el punto de conexión. Esta ranura de replicación lógica guarda los cambios continuos desde el momento en que se creó el punto de enlace, por lo que permite replicar desde un punto anterior.

PostgreSQL escribe los cambios de la base de datos en archivos WAL que solamente se descartan cuando AWS DMS lee correctamente los cambios de la ranura de replicación lógica. El uso de ranuras de replicación lógica puede evitar que los cambios registrados se eliminen antes de que el motor de replicación los consuma.

Sin embargo, en función de la tasa de cambio y consumo, los cambios que contiene una ranura de replicación lógica pueden provocar un uso elevado del disco. Se recomienda establecer alarmas de uso de espacio en la instancia de PostgreSQL de origen cuando se utilizan ranuras de replicación lógica. Para obtener más información acerca de cómo establecer el atributo slotName de conexión adicional, consulte Configuración del punto de conexión y atributos de conexión adicionales al usar PostgreSQL como origen de DMS.

En el siguiente procedimiento, se explica este enfoque paso a paso con más detalle.

Para utilizar un punto de inicio de CDC nativo con el fin de configurar una carga de CDC de un punto de enlace de origen de PostgreSQL
  1. Identifique una ranura de replicación lógica que se haya empleado en una tarea de replicación anterior (una tarea principal) para utilizarla como punto de inicio. A continuación, consulte la vista pg_replication_slots de la base de datos de origen para asegurarse de que esta ranura no tiene ninguna conexión activa. Si tiene, resuélvalas y ciérrelas antes de continuar.

    En los siguientes pasos, vamos a suponer que la ranura de replicación lógica es abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef.

  2. Cree un nuevo punto de enlace de origen que incluya la siguiente configuración adicional de atributos de conexión:

    slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
  3. Cree una nueva tarea exclusiva de CDC con la consola, AWS CLI o la API de AWS DMS. Por ejemplo, puede usar la CLI para ejecutar el siguiente comando create-replication-task.

    aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" --replication-task-settings "file://task-pg.json"

    En el comando anterior, se establecen las siguientes opciones:

    • La opción source-endpoint-arn se establece en el nuevo valor que creó en el paso 2.

    • La opción replication-instance-arn se establece en el mismo valor que en la tarea principal del paso 1.

    • Las opciones table-mappings y replication-task-settings se establecen en los mismos valores que en la tarea principal del paso 1.

    • Se establece la opción cdc-start-position para iniciar un valor de posición. Para encontrar esta posición inicial, consulte la vista pg_replication_slots de la base de datos de origen o vea los detalles de la consola de la tarea principal en el paso 1. Para obtener más información, consulte Determinar un punto de inicio de CDC nativo.

    Para habilitar el modo de inicio de CDC personalizado al crear una nueva tarea exclusiva de CDC mediante la consola de AWS DMS, haga lo siguiente:

    • En la sección Configuración de tareas, para el modo de inicio de CDC para las transacciones de origen, elija Habilitar el modo de inicio de CDC personalizado.

    • Para el punto de inicio personalizado de CDC para las transacciones de origen, elija Especificar un número de secuencia de registro. Especifique el número de cambio del sistema o elija Especificar un punto de control de recuperación y proporcione un punto de control de recuperación.

    Cuando se ejecuta esta tarea de CDC, AWS DMS genera un error si la ranura de replicación lógica especificada no existe. También se genera un error si la tarea no se crea con una configuración válida para cdc-start-position.

Si utiliza puntos de partida nativos de CDC con el complemento pglogical y desea utilizar una nueva ranura de replicación, complete los pasos de configuración que se indican a continuación antes de crear una tarea de CDC.

Uso de una nueva ranura de replicación que no se haya creado anteriormente como parte de otra tarea de DMS
  1. Cree una ranura de replicación, como se muestra a continuación:

    SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
  2. Una vez que la base de datos crea la ranura de replicación, obtenga y anote los valores restart_lsn y confirmed_flush_lsn de la ranura:

    select * from pg_replication_slots where slot_name like 'replication_slot_name';

    Tenga en cuenta que la posición de inicio nativa de CDC para una tarea de CDC creada después de la ranura de replicación no puede ser anterior al valor confirmed_flush_lsn.

    Para obtener información sobre los valores restart_lsn y confirmed_flush_lsn, consulte pg_replication_slots

  3. Cree un nodo pglogical.

    SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
  4. Cree dos conjuntos de replicación mediante la función pglogical.create_replication_set. El primer conjunto de replicación realiza un seguimiento de las actualizaciones y eliminaciones de las tablas que tienen claves principales. El segundo conjunto de replicación rastrea solo las inserciones y tiene el mismo nombre que el primer conjunto de replicación, con el prefijo “i” agregado.

    SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false); SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
  5. Agregue una tabla al conjunto de replicación.

    SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true); SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
  6. Establezca el atributo de conexión adicional (ECA) que se muestra a continuación al crear el punto de conexión de origen.

    PluginName=PGLOGICAL;slotName=slot_name;

Ahora puede crear una tarea exclusiva de CDC con un punto de partida nativo de PostgreSQL mediante la nueva ranura de replicación. Para obtener más información sobre el complemento de pglogical, consulte la documentación de pglogical 3.7

Migración de PostgreSQL a PostgreSQL con AWS DMS

Al migrar desde un motor de base de datos distinto de PostgreSQL a una base de datos de PostgreSQL, AWS DMS es casi siempre la mejor herramienta de migración que se puede utilizar. Pero cuando migre de una base de datos de PostgreSQL a una base de datos de PostgreSQL, las herramientas de PostgreSQL pueden ser más eficaces.

Uso de herramientas nativas de PostgreSQL para migrar datos

Es recomendable usar las herramientas de migración de bases de datos de PostgreSQL como pg_dump si se dan las condiciones siguientes:

  • Se trata de una migración homogénea, en la que se migra desde una base de datos de PostgreSQL de origen a una base de datos de PostgreSQL de destino.

  • Se va a migrar una base de datos completa.

  • Las herramientas nativas le permiten migrar sus datos con un tiempo de inactividad mínimo.

La utilidad pg_dump usa el comando COPY para crear un esquema y un volcado de datos de una base de datos de PostgreSQL. El script de volcado generado por pg_dump carga los datos en una base de datos con el mismo nombre y vuelve a crear las tablas, los índices y las claves externas. Para restaurar los datos en una base de datos con un nombre diferente, use el comando pg_restore y el parámetro -d.

Si va a migrar datos de una base de datos de origen de PostgreSQL que se ejecuta en EC2 a un destino de Amazon RDS para PostgreSQL, puede utilizar el complemento pglogical.

Para obtener más información sobre la importación de una base de datos de PostgreSQL en Amazon RDS para PostgreSQL o Amazon Aurora PostgreSQL-Compatible Edition, consulte https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html.

Uso de DMS para migrar datos de PostgreSQL a PostgreSQL

AWS DMS puede migrar datos, por ejemplo, desde una base de datos de PostgreSQL de origen que esté en las instalaciones en una instancia de Amazon RDS para PostgreSQL o Aurora PostgreSQL de destino. Los tipos de datos de PostgreSQL básicos se migran normalmente sin problemas.

nota

Al replicar tablas particionadas de un origen de PostgreSQL a un destino de PostgreSQL, no es necesario que mencione la tabla principal como parte de los criterios de selección en la tarea de DMS. Mencionar la tabla principal provoca que los datos se dupliquen en las tablas secundarias del destino, lo que podría provocar una infracción de PK. Al seleccionar solo las tablas secundarias en los criterios de selección de la asignación de tablas, la tabla principal se rellena automáticamente.

Sin embargo, es posible que aquellos tipos de datos que se admitan en la base de datos de origen, pero no en el destino, no se migren correctamente. AWS DMS transmite en streaming algunos tipos de datos como cadenas si el tipo de datos es desconocido. Algunos tipos de datos, como XML y JSON, se pueden migrar correctamente como archivos pequeños, pero se puede producir un error si los documentos son grandes.

Cuando realice la migración de un tipo de datos, tenga en cuenta lo siguiente:

  • En algunos casos, el tipo de datos NUMERIC(p,s) de PostgreSQL no especifica precisión ni escala. Para las versiones 3.4.2 y anteriores de DMS, DMS usa una precisión de 28 y una escala de 6 de forma predeterminada, NUMERIC(28,6). Por ejemplo, el valor 0.611111104488373 del origen se convierte a 0.611111 en el destino de PostgreSQL.

  • Una tabla con un tipo de datos de MATRIZ debe contar con una clave principal. Una tabla con un tipo de datos de MATRIZ a la que le falta una clave principal se suspende durante la carga completa.

En la siguiente tabla se muestran los tipos de datos de PostgreSQL de origen y se indica si pueden migrarse correctamente:

Tipo de datos Se migra correctamente Se migra parcialmente No se migra Comentarios
INTEGER X
SMALLINT X
BIGINT X
NUMERIC/DECIMAL(p,s) X Donde 0<p<39 y 0<s
NUMERIC/DECIMAL X Donde p>38 o p=s=0
REAL X
DOBLE X
SMALLSERIAL X
SERIAL X
BIGSERIAL X
MONEY X
CHAR X Sin precisión especificada
CHAR(n) X
VARCHAR X Sin precisión especificada
VARCHAR (n) X
TEXT X
BYTEA X
MARCA DE TIEMPO X Los valores infinitos positivos y negativos se truncan a “9999-12-31 23:59:59” y “4713-01-01 00:00:00 a. C.”, respectivamente.
MARCA DE TIEMPO CON ZONA HORARIA X
FECHA X
HORA X
HORA CON ZONA HORARIA X
INTERVAL X
BOOLEAN X
ENUM X
CIDR X
INET X
MACADDR X
TSVECTOR X
TSQUERY X
XML X
POINT X Tipo de datos espaciales PostGIS
LINE X
LSEG X
BOX X
PATH X
POLYGON X Tipo de datos espaciales PostGIS
CIRCLE X
JSON X
ARRAY X Requiere clave principal
COMPOSITE X
RANGE X
LINESTRING X Tipo de datos espaciales PostGIS
MULTIPOINT X Tipo de datos espaciales PostGIS
MULTILINESTRING X Tipo de datos espaciales PostGIS
MULTIPOLYGON X Tipo de datos espaciales PostGIS
GEOMETRYCOLLECTION X Tipo de datos espaciales PostGIS

Migración de tipos de datos espaciales PostGIS

Los datos espaciales identifican la información de geometría de un objeto o ubicación en el espacio. Las bases de datos relacionales de objetos de PostgreSQL admiten los tipos de datos espaciales PostGIS.

Antes de migrar objetos de datos espaciales de PostgreSQL, asegúrese de que el complemento PostGIS esté habilitado en el nivel global. Al hacerlo, AWS DMS crea las columnas exactas de datos espaciales de origen para la instancia de base de datos de destino de PostgreSQL.

Para las migraciones homogéneas de PostgreSQL a PostgreSQL, AWS DMS admite la migración de tipos y subtipos de objetos de datos geométricos y geográficos (coordenadas geodésicas) de PostGIS, como los siguientes:

  • POINT

  • LINESTRING

  • POLYGON

  • MULTIPOINT

  • MULTILINESTRING

  • MULTIPOLYGON

  • GEOMETRYCOLLECTION

Migración de Babelfish a Amazon Aurora PostgreSQL mediante AWS DMS

Puede migrar las tablas de origen de Babelfish para Aurora PostgreSQL a cualquier punto de conexión de destino admitido mediante AWS DMS.

Al crear el punto de conexión de origen de AWS DMS mediante la consola, la API o los comandos de la CLI de DMS, el origen se establece en Amazon Aurora PostgreSQL y el nombre de la base de datos en babelfish_db. En la sección Configuración del punto de conexión, asegúrese de que DatabaseMode esté establecido en Babelfish y BabelfishDatabaseName esté establecido en el nombre de la base de datos T-SQL de Babelfish de origen. En lugar de usar el puerto TCP de Babelfish 1433, utilice el puerto TCP de Aurora PostgreSQL 5432.

Debe crear las tablas antes de migrar los datos para asegurarse de que DMS utiliza los tipos de datos y los metadatos de las tablas correctos. Si no crea las tablas en el destino antes de ejecutar la migración, es posible que DNS cree las tablas con permisos y tipos de datos incorrectos.

Agregar reglas de transformación a la tarea de migración

Al crear una tarea de migración para un origen de Babelfish, debe incluir reglas de transformación que garanticen que DMS utilice las tablas de destino creadas previamente.

Si configuró el modo de migración de bases de datos múltiples al definir el clúster de Babelfish para PostgreSQL, agregue una regla de transformación que cambie el nombre del esquema al del esquema de T-SQL. Por ejemplo, si el nombre del esquema de T-SQL es dbo y el nombre del esquema de Babelfish para PostgreSQL es mydb_dbo, cambie el nombre del esquema a dbo mediante una regla de transformación. Para encontrar el nombre del esquema de PostgreSQL, consulte Arquitectura de Babelfish en la Guía del usuario de Amazon Aurora.

Si utiliza el modo de base de datos única, no necesita una regla de transformación para cambiar el nombre de los esquemas de base de datos. Los nombres de los esquemas de PostgreSQL tienen una asignación uno a uno con los nombres de los esquemas de la base de datos T-SQL.

El siguiente ejemplo de regla de transformación muestra cómo volver a cambiar el nombre del esquema de mydb_dbo a dbo:

{ "rules": [ { "rule-type": "transformation", "rule-id": "566251737", "rule-name": "566251737", "rule-target": "schema", "object-locator": { "schema-name": "mydb_dbo" }, "rule-action": "rename", "value": "dbo", "old-value": null }, { "rule-type": "selection", "rule-id": "566111704", "rule-name": "566111704", "object-locator": { "schema-name": "mydb_dbo", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }

Restricciones en el uso de un punto de conexión de origen de PostgreSQL con tablas de Babelfish

Las siguientes restricciones se aplican al usar un punto de conexión de origen de PostgreSQL con tablas de Babelfish:

  • DMS solo admite la migración desde las versiones 16.2/15.6 y posteriores de Babelfish y desde la versión 3.5.3 y posteriores de DMS.

  • DMS no replica los cambios de la definición de tabla de Babelfish en el punto de conexión de destino. Una solución para esta limitación consiste en aplicar primero los cambios de la definición de tabla en el destino y, a continuación, cambiar la definición de la tabla en el origen de Babelfish.

  • Al crear tablas de Babelfish con el tipo de datos BYTEA, DMS las convierte al tipo de datos varbinary(max) al migrar a SQL Server como destino.

  • DMS no admite el modo de LOB completo para los tipos de datos binarios. En su lugar, utilice el modo de LOB limitado para los tipos de datos binarios.

  • DMS no admite la validación de datos de Babelfish como origen.

  • Para la configuración de la tarea Modo de preparación de la tabla de destino utilice solo los modos No hacer nada o Truncar. No utilice el modo Borrar tablas en el destino. Al utilizar Descartar las tablas en el destino, DMS puede crear las tablas con tipos de datos incorrectos.

  • Cuando utilice la replicación continua (CDC o Carga completa y CDC), establezca el atributo de conexión adicional PluginName en TEST_DECODING.

  • DMS no admite la replicación (CDC o Carga completa y CDC) de tablas particionadas para Babelfish como origen.

Quitar artefactos de AWS DMS de una base de datos de origen de PostgreSQL

Para capturar eventos DDL, AWS DMS crea varios artefactos en la base de datos de PostgreSQL cuando comienza una tarea de migración. Cuando se complete la tarea, es posible que quiera eliminar estos artefactos.

Para eliminar los artefactos, emita las instrucciones siguientes (en el orden en el que aparecen), donde {AmazonRDSMigration} es el esquema en el que se crearon los artefactos. La operación de ingresar un esquema se debe realizar con su sumo cuidado. No ingrese nunca un esquema operativo, especialmente si es público.

drop event trigger awsdms_intercept_ddl;

El disparador de eventos no pertenece a un esquema específico.

drop function {AmazonRDSMigration}.awsdms_intercept_ddl() drop table {AmazonRDSMigration}.awsdms_ddl_audit drop schema {AmazonRDSMigration}

Ajustes de configuración adicionales al utilizar una base de datos de PostgreSQL como origen de DMS

Puede añadir parámetros de configuración adicionales cuando migre datos desde una base de datos de PostgreSQL de dos maneras:

  • Puede añadir valores al atributo extra connection para capturar eventos DDL y especificar el esquema en el que se crean los artefactos de la base de datos DDL. Para obtener más información, consulte Configuración del punto de conexión y atributos de conexión adicionales al usar PostgreSQL como origen de DMS.

  • Puede anular parámetros de cadenas de conexión. Elija esta opción para hacer cualquiera de las siguientes acciones:

    • Especifique parámetros de AWS DMS internos. Estos parámetros se necesitan en contadas ocasiones, no están a la vista en la interfaz de usuario.

    • Especificar los valores de paso (passthru) para el cliente de base de datos específico. AWS DMS contiene parámetros de paso a través en la cadena de conexión que se pasa al cliente de base de datos.

  • Al utilizar el parámetro en el nivel de tabla REPLICA IDENTITY en las versiones 9.4 y superiores de PostgreSQL, puede controlar la información que se escribe en los registros de escritura anticipada (WAL). En particular, lo hace para los WAL que identifican las filas que se actualizan o eliminan. REPLICA IDENTITY FULL registra los valores antiguos de todas las columnas de la fila. Al usar REPLICA IDENTITY FULL detenidamente para cada tabla como FULL, se genera una cantidad adicional de WAL que es posible que no sea necesaria. Para obtener más información, consulte ALTER TABLE-REPLICA IDENTITY

Uso de la configuración del punto de conexión MapBooleanAsBoolean de PostgreSQL

Puede usar la configuración del punto de conexión de PostgreSQL para asignar un booleano como booleano desde el origen de PostgreSQL a un destino de Amazon Redshift. De forma predeterminada, un tipo BOOLEANO se migra como varchar(5). Puede especificar MapBooleanAsBoolean para permitir que PostgreSQL migre el tipo booleano como booleano, como se muestra en el siguiente ejemplo.

--postgre-sql-settings '{"MapBooleanAsBoolean": true}'

Tenga en cuenta que debe establecer esta configuración en los puntos de conexión de origen y destino para que surta efecto.

Como MySQL no tiene un tipo BOOLEANO, utilice una regla de transformación en lugar de esta configuración al migrar datos BOOLEANOS a MySQL.

Configuración del punto de conexión y atributos de conexión adicionales al usar PostgreSQL como origen de DMS

Puede utilizar la configuración del punto de conexión y los atributos de conexión adicionales para configurar la base de datos de origen de PostgreSQL. La configuración del punto de conexión se especifica al crear el punto de conexión de origen mediante la consola de AWS DMS o mediante el comando create-endpoint en la AWS CLI, con la sintaxis JSON --postgre-sql-settings '{"EndpointSetting": "value", ...}'.

La siguiente tabla muestra la configuración del punto de conexión y los atributos de conexión adicionales que puede utilizar con PostgreSQL como origen.

Nombre de atributo Descripción

CaptureDdls

Para capturar eventos DDL, AWS DMS crea varios artefactos en la base de datos de PostgreSQL al iniciar la tarea. Más adelante podrá quitar estos artefactos según se describe en Quitar artefactos de AWS DMS de una base de datos de origen de PostgreSQL.

Si este valor se ha establecido en falso, no es necesario crear tablas ni desencadenadores en la base de datos de origen.

Se capturan los eventos DDL transmitidos.

Valor predeterminado: true

Valores válidos: true/false

Ejemplo: --postgre-sql-settings '{"CaptureDdls": true}'

ConsumeMonotonicEvents

Se utiliza para controlar cómo se replican las transacciones monolíticas con números de secuencia de registro (LSN) duplicados. Cuando este parámetro es false, los eventos con LSN duplicados se consumen y se replican en el destino. Cuando este parámetro es true, solo se replica el primer evento, mientras que los eventos con LSN duplicados no se consumen ni se replican en el destino.

Valor predeterminado: false

Valores válidos: falso/verdadero

Ejemplo: --postgre-sql-settings '{"ConsumeMonotonicEvents": true}'

DdlArtifactsSchema

Establece el esquema en el que se crean los artefactos de la base de datos de DDL.

Valor predeterminado: público

Valores válidos: string

Ejemplo: --postgre-sql-settings '{"DdlArtifactsSchema": "xyzddlschema"}'

ExecuteTimeout

Establece el tiempo de espera de las instrucciones del cliente para la instancia de PostgreSQL, en segundos. El valor de predeterminado es de 60 segundos.

Ejemplo: --postgre-sql-settings '{"ExecuteTimeout": 100}'

FailTasksOnLobTruncation

Cuando se establece en true, este valor provoca un error en una tarea si el tamaño real de una columna de LOB es mayor que el LobMaxSize especificado.

Si una tarea está establecida en el modo LOB limitado y esta opción está establecida en true, la tarea genera un error en vez de truncar los datos de LOB.

Valor predeterminado: false

Valores válidos: booleano

Ejemplo: --postgre-sql-settings '{"FailTasksOnLobTruncation": true}'

fetchCacheSize

Este atributo de conexión adicional (ECA) establece el número de filas que el cursor buscará durante el funcionamiento de carga completa. En función de los recursos disponibles en la instancia de replicación, puede ajustar el valor al alza o a la baja.

Valor predeterminado: 10000

Valores válidos: Number

Ejemplo de ECA: fetchCacheSize=10000;

HeartbeatEnable

La característica de frecuencia del latido de WAL imita una transacción ficticia, de modo que las ranuras de replicación lógica inactivas no se mantienen en registros WAL antiguos, lo que puede dar lugar a situaciones de almacenamiento completo en el origen. Este latido mantiene en movimiento a restart_lsn y evita que el almacenamiento se llene.

Valor predeterminado: false

Valores válidos: true/false

Ejemplo: --postgre-sql-settings '{"HeartbeatEnable": true}'

HeartbeatFrequency

Establece la frecuencia del latido de WAL (en minutos).

Valor predeterminado: 5

Valores válidos: Number

Ejemplo: --postgre-sql-settings '{"HeartbeatFrequency": 1}'

HeartbeatSchema

Establece el esquema en el que se crearon los artefactos de latido.

Valor predeterminado: public

Valores válidos: string

Ejemplo: --postgre-sql-settings '{"HeartbeatSchema": "xyzheartbeatschema"}'

MapJsonbAsClob

De forma predeterminada, AWS DMS asigna JSONB a NCLOB. Puede especificar MapJsonbAsClob para permitir que PostgreSQL migre el tipo JSONB como CLOB.

Ejemplo: --postgre-sql-settings='{"MapJsonbAsClob": "true"}'

MapLongVarcharAs

De forma predeterminada, AWS DMS asigna VARCHAR a WSTRING. Puede especificar MapLongVarcharAs para permitir que PostgreSQL migre el tipo VARCHAR(N) (donde N es mayor que 16 387) a los siguientes tipos:

  • WSTRING

  • CLOB

  • NCLOB

Ejemplo: --postgre-sql-settings='{"MapLongVarcharAs": "CLOB"}'

MapUnboundedNumericAsString

Este parámetro trata las columnas con tipos de datos NUMÉRICOS ilimitados como CADENA para poder migrar correctamente sin perder la precisión del valor numérico. Utilice este parámetro solo para la replicación desde el origen de PostgreSQL al destino de PostgreSQL o para bases de datos compatibles con PostgreSQL.

Valor predeterminado: false

Valores válidos: false/true

Ejemplo: --postgre-sql-settings '{"MapUnboundedNumericAsString": true}'

Es posible que el uso de este parámetro provoque una cierta degradación del rendimiento de la replicación debido a la transformación de numérico a cadena y de nuevo a numérico. Este parámetro se admite para su uso en la versión 3.4.4 y versiones superiores de DMS

nota

Use MapUnboundedNumericAsString solo en los puntos de conexión de origen y destino de PostgreSQL juntos.

El uso de MapUnboundedNumericAsString en puntos de conexión de PostgreSQL de origen restringe la precisión a 28 durante CDC. El uso de MapUnboundedNumericAsString en los puntos de conexión de destino migra los datos con precisión de 28 y escala de 6.

No use MapUnboundedNumericAsString con destinos que no sean de PostgreSQL.

PluginName

Especifica el complemento que se va a utilizar para crear una ranura de replicación.

Valores válidos: pglogical, test_decoding

Ejemplo: --postgre-sql-settings '{"PluginName": "test_decoding"}'

SlotName

Establece el nombre de una ranura de replicación lógica creada anteriormente para una carga de CDC de la instancia de origen de PostgreSQL.

Cuando se utiliza con el parámetro de solicitud CdcStartPosition de la API de AWS DMS, este atributo también permite usar puntos de inicio de CDC nativos. DMS comprueba que existe la ranura de replicación lógica especificada antes de iniciar la tarea de carga de CDC. También verifica que la tarea se creó con una configuración de CdcStartPosition válida. Si la ranura especificada no existe o la tarea no tiene una configuración de CdcStartPosition válida, DMS genera un error.

Para obtener más información sobre la configuración del parámetro de solicitud CdcStartPosition, consulte Determinar un punto de inicio de CDC nativo. Para obtener más información sobre el uso de CdcStartPosition, consulte la documentación de las operaciones de API CreateReplicationTask, StartReplicationTask y ModifyReplicationTask en la Referencia de la API de AWS Database Migration Service.

Valores válidos: string

Ejemplo: --postgre-sql-settings '{"SlotName": "abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef"}'

unboundedVarcharMaxSize

Este atributo de conexión adicional define el tamaño máximo de una columna de datos definida como tipo VarChar sin un especificador de longitud máxima. El valor predeterminado es 8000 bytes. El valor máximo es 10 485 760 bytes.

Restricciones en el uso de una base de datos de PostgreSQL como origen de DMS

Al utilizar PostgreSQL como origen para AWS DMS se aplican las siguientes restricciones:

  • AWS DMS no funciona con Amazon RDS para PostgreSQL 10.4 o Amazon Aurora PostgreSQL 10.4 como origen o destino.

  • Las tablas de captura deben contar con una clave principal. Si una tabla no dispone de clave principal, AWS DMS omite las operaciones de registro DELETE y UPDATE para dicha tabla. Como solución alternativa, consulte Habilitación de la captura de datos de cambios (CDC) mediante replicación lógica.

    Nota: No recomendamos migrar sin una clave principal o un índice único, de lo contrario, se aplicarán limitaciones adicionales, como la capacidad de aplicación por lotes “NO”, la capacidad de LOB total, la validación de datos y la incapacidad de replicar en el destino de Redshift de manera eficiente.

  • AWS DMS omite un intento de actualizar un segmento de clave principal. En estos casos, el destino identifica la actualización como una que no ha actualizado ninguna fila. Sin embargo, dado que los resultados de actualizar una clave primaria en PostgreSQL son imprevisibles, no se escriben registros en la tabla de excepciones.

  • AWS DMS no admite la opción de ejecución Start Process Changes from Timestamp (Iniciar procesamiento de cambios a partir de una hora de inicio).

  • AWS DMS no replica los cambios de datos resultantes de operaciones de partición o subpartición (ADD, DROP o TRUNCATE).

  • La replicación de varias tablas que tengan el mismo nombre donde cada nombre está escrito con un uso de las mayúsculas y minúsculas diferente (por ejemplo, tabla1, TABLA1 y Tabla1) puede provocar un comportamiento imprevisible. Debido a este problema, AWS DMS no admite este tipo de replicación.

  • En la mayoría de los casos AWS DMS admite cambiar el procesamiento de las instrucciones DDL de CREATE, ALTER y DROP para las tablas. AWS DMS no admite este cambio si las tablas se conserven en un bloque de contenido de una función o procedimiento internos o en otros constructos anidados.

    Por ejemplo, el siguiente cambio no se capturó.

    CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void LANGUAGE plpgsql AS $$ BEGIN create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT NULL); END; $$;
  • Actualmente, los tipos de datos boolean de un origen de PostgreSQL se migran a un destino de SQL Server como tipo de datos bit con valores incoherentes. Como solución alternativa, cree previamente la tabla con un tipo datos VARCHAR(1) para la columna (o haga que AWS DMS cree la tabla). A continuación, haga que el procesamiento descendente trate la "F" como falso y la "T" como verdadero.

  • AWS DMS no admite cambiar el procesamiento de las operaciones TRUNCATE.

  • El tipo de datos de LOB OID no se migra al destino.

  • AWS DMS admite el tipo de datos PostGIS solo para migraciones homogéneas.

  • Si el origen es una base de datos de PostgreSQL en las instalaciones o una instancia de Amazon EC2, asegúrese de que el complemento de salida test_decoding esté instalado en el punto de conexión de origen. Puede encontrar este complemento en el paquete contrib de PostgreSQL. Para obtener más información acerca del complemento test-decoding consulte la documentación de PostgreSQL.

  • AWS DMS no admite cambiar el procesamiento para establecer o anular valores predeterminados de columnas (con la cláusula ALTER COLUMN SET DEFAULT en instrucciones ALTER TABLE).

  • AWS DMS no admite cambiar el procesamiento para establecer la nulabilidad de columnas (con la cláusula ALTER COLUMN [SET|DROP] NOT NULL en instrucciones ALTER TABLE).

  • Cuando la replicación lógica está habilitada, el número máximo de cambios guardados en la memoria por transacción es de 4 MB. Después de eso, los cambios se transfieren al disco. Como resultado, ReplicationSlotDiskUsage aumenta y restart_lsn no avanza hasta que la transacción se complete o detenga y finalice la reversión. Como se trata de una transacción larga, puede tardar mucho tiempo en restaurarse. Por lo tanto, evite las transacciones de larga duración o muchas subtransacciones cuando la replicación lógica esté habilitada. En su lugar, divida la transacción en varias transacciones más pequeñas.

    En las versiones 13 y posteriores de Aurora PostgreSQL, puede ajustar el parámetro logical_decoding_work_mem para controlar cuándo vuelca DMS los datos de cambios en el disco. Para obtener más información, consulte Archivos de volcado en Aurora PostgreSQL.

  • Una tabla con un tipo de datos de MATRIZ debe contar con una clave principal. Una tabla con un tipo de datos de MATRIZ a la que le falta una clave principal se suspende durante la carga completa.

  • AWS DMS no admite la replicación de las tablas con particiones. Cuando se detecta una tabla con particiones, sucede lo siguiente:

    • El punto de enlace notifica una lista de las tablas principales y secundarias.

    • AWS DMS crea la tabla en el destino como una tabla normal con las mismas propiedades que las tablas seleccionadas.

    • Si la tabla principal en la base de datos de origen tiene el mismo valor de clave principal que las tablas secundarias, se genera un error de "clave duplicada".

  • Para replicar tablas con particiones desde un origen de PostgreSQL a un destino de PostgreSQL, primero debe crear manualmente las tablas principal y secundaria en el destino. A continuación, defina una tarea independiente para replicar en estas tablas. En tal caso, establezca la configuración de la tarea en Truncar antes de cargar.

  • El tipo de datos NUMERIC de PostgreSQL no tiene un tamaño fijo. Cuando se transfieren datos que tienen el tipo de datos NUMERIC pero sin precisión ni escala, DMS utiliza NUMERIC(28,6) (con una precisión de 28 y una escala de 6) de forma predeterminada. Por ejemplo, el valor 0,611111104488373 del origen se convierte a 0,611111 en el destino de PostgreSQL.

  • AWS DMS admite Aurora PostgreSQL sin servidor V1 como origen solo para tareas de carga completa. AWS DMS admite Aurora PostgreSQL sin servidor V2 como origen para tareas de carga completa, carga completa y CDC y exclusivamente de CDC.

  • AWS DMS no admite la replicación de una tabla con un índice único creado con una función coalesce.

  • Cuando se utiliza el modo de LOB, tanto la tabla de origen como la tabla de destino correspondiente deben tener una clave principal idéntica. Si una de las tablas no tiene una clave principal, el resultado de las operaciones ELIMINAR y ACTUALIZAR registros será impredecible.

  • Cuando se utiliza la característica de carga paralela, no se admite la segmentación de tablas en función de particiones o subparticiones. Para obtener más información acerca de la carga paralela, consulte Uso de carga paralela para tablas, vistas y recopilaciones seleccionadas

  • AWS DMS no admite restricciones diferidas.

  • La versión 3.4.7 de AWS DMS admite PostgreSQL 14.x como origen con las estas limitaciones:

    • AWS DMS no admite el procesamiento de cambios de las confirmaciones de fase dos.

    • AWS DMS no admite la replicación lógica para transmitir transacciones en curso largas.

  • AWS DMS no admite CDC para Amazon RDS Proxy para PostgreSQL como origen.

  • Si se utilizan filtros de origen que no contienen una columna de clave principal, no se capturarán las operaciones DELETE.

  • Si la base de datos de origen también es el destino de otro sistema de replicación de terceros, es posible que los cambios de DDL no se migren durante CDC. Porque esa situación puede impedir que se active el desencadenador del evento awsdms_intercept_ddl. Para evitar la situación, modifique ese desencadenador en la base de datos de origen de la siguiente manera:

    alter event trigger awsdms_intercept_ddl enable always;
  • AWS DMS no admite CDC para el clúster de bases de datos de Amazon RDS Multi-AZ para PostgreSQL como origen, ya que los clústeres de bases de datos de RDS para PostgreSQL Multi-AZ no admiten la replicación lógica.

Tipos de datos de origen para PostgreSQL

En la siguiente tabla se muestran los tipos de datos de origen de PostgreSQL compatibles cuando se utiliza AWS DMS y el mapeo predeterminado de los tipos de datos de AWS DMS.

Para obtener más información sobre cómo ver el tipo de datos que se asigna en el destino, consulte la sección del punto de enlace de destino que esté utilizando.

Para obtener más información sobre los tipos de datos de AWS DMS, consulte Tipos de datos de AWS Database Migration Service.

Tipos de datos de PostgreSQL

Tipos de datos de DMS

INTEGER

INT4

SMALLINT

INT2

BIGINT

INT8

NUMERIC (p,s)

Si la precisión es de 0 a 38, utilice NUMERIC.

Si la precisión es 39 o superior, utilice STRING.

DECIMAL(P,S)

Si la precisión es de 0 a 38, utilice NUMERIC.

Si la precisión es 39 o superior, utilice STRING.

REAL

REAL4

DOBLE

REAL8

SMALLSERIAL

INT2

SERIAL

INT4

BIGSERIAL

INT8

MONEY

NUMERIC(38,4)

El tipo de datos MONEY se asigna a FLOAT en SQL Server.

CHAR

WSTRING (1)

CHAR(N)

WSTRING (n)

VARCHAR(N)

WSTRING (n)

TEXT

NCLOB

CITEXT

NCLOB

BYTEA

BLOB

MARCA DE TIEMPO

DATETIME

MARCA DE TIEMPO CON ZONA HORARIA

DATETIME

FECHA

FECHA

HORA

HORA

HORA CON ZONA HORARIA

HORA

INTERVAL

STRING (128): 1 YEAR, 2 MONTHS, 3 DAYS, 4 HOURS, 5 MINUTES, 6 SECONDS

BOOLEAN

CHAR (5) false o true

ENUM

STRING (64)

CIDR

STRING (50)

INET

STRING (50)

MACADDR

STRING (18)

BIT (n)

STRING (n)

BIT VARYING (n)

STRING (n)

UUID

STRING

TSVECTOR

CLOB

TSQUERY

CLOB

XML

CLOB

POINT

STRING (255) "(x,y)"

LINE

STRING (255) "(x,y,z)"

LSEG

STRING (255) "((x1,y1),(x2,y2))"

BOX

STRING (255) "((x1,y1),(x2,y2))"

PATH

CLOB "((x1,y1),(xn,yn))"

POLYGON

CLOB "((x1,y1),(xn,yn))"

CIRCLE

STRING (255) "(x,y),r"

JSON

NCLOB

JSONB

NCLOB

ARRAY

NCLOB

COMPOSITE

NCLOB

HSTORE

NCLOB

INT4RANGE

STRING (255)

INT8RANGE

STRING (255)

NUMRANGE

STRING (255)

STRRANGE

STRING (255)

Trabajo con tipos de datos de origen de LOB para PostgreSQL

Los tamaños de columna de PostgreSQL afectan a la conversión de tipos de datos LOB de PostgreSQL a tipos de datos de AWS DMS. Para trabajar con esto, siga los pasos que se indican a continuación para los tipos de AWS DMS datos siguientes:

  • BLOB: establezca Limitar tamaño de LOB a en el valor Tamaño máximo de LOB (KB) al crear la tarea.

  • CLOB: la replicación gestiona cada carácter como carácter UTF8. Por lo tanto, encuentre la longitud del texto con más caracteres en la columna, que se muestra aquí como max_num_chars_text. Utilice esta longitud para especificar el valor de Limitar el tamaño de LOB a. Si los datos incluyen caracteres de 4 bytes, multiplique por 2 para especificar el valor Limit LOB size to (Limitar tamaño de LOB a), que está en bytes. En este caso, Limit LOB size to (Limitar tamaño de LOB a) es igual a max_num_chars_text multiplicado por 2.

  • NCLOB: la replicación gestiona cada carácter como carácter de dos bytes. Por lo tanto, busque la longitud del texto con más caracteres en la columna (max_num_chars_text) y multiplíquela por 2. Hace esto para especificar el valor de Limitar el tamaño de LOB a. En este caso, Limit LOB size to (Limitar tamaño de LOB a) es igual a max_num_chars_text multiplicado por 2. Si los datos incluyen caracteres de 4 bytes, multiplíquelos por 2 de nuevo. En este caso, Limit LOB size to (Limitar tamaño de LOB a) es igual a max_num_chars_text multiplicado por 4.