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:
-
Cree un usuario de PostgreSQL con los permisos adecuados para proporcionar a AWS DMS acceso a la base de datos de origen de PostgreSQL.
nota
-
Si la base de datos de origen de PostgreSQL es autoadministrada, consulte Trabajar con bases de datos de PostgreSQL autoadministradas como origen en AWS DMS para obtener más información.
-
Si la base de datos de origen de PostgreSQL la administra Amazon RDS, consulte Trabajo con bases de datos de PostgreSQL administradas por AWS como un origen de DMS para obtener más información.
-
-
Cree un punto de conexión de origen de PostgreSQL que se ajuste a la configuración de base de datos de PostgreSQL que haya elegido.
-
Cree una tarea o un conjunto de tareas para migrar las tablas.
Para crear una tarea exclusiva de carga completa, no se necesita ninguna configuración adicional de punto de conexión.
Antes de crear una tarea para la captura de datos de cambios (una tarea exclusiva de CDC o de carga completa de CDC y de CDC), consulte Habilitación de CDC con una base de datos de PostgreSQL autoadministrada como origen de AWS DMS o Habilitación de CDC con una instancia de base de datos de PostgreSQL administrada por AWS con AWS DMS.
Temas
- Trabajar con bases de datos de PostgreSQL autoadministradas como origen en AWS DMS
- Trabajo con bases de datos de PostgreSQL administradas por AWS como un origen de DMS
- Habilitación de la captura de datos de cambios (CDC) mediante replicación lógica
- Uso de puntos de inicio de CDC nativo para configurar una carga de CDC de un origen de PostgreSQL
- Migración de PostgreSQL a PostgreSQL con AWS DMS
- Migración de Babelfish a Amazon Aurora PostgreSQL mediante AWS DMS
- Quitar artefactos de AWS DMS de una base de datos de origen de PostgreSQL
- Ajustes de configuración adicionales al utilizar una base de datos de PostgreSQL como origen de DMS
- Uso de la configuración del punto de conexión MapBooleanAsBoolean de PostgreSQL
- Configuración del punto de conexión y atributos de conexión adicionales al usar PostgreSQL como origen de DMS
- Restricciones en el uso de una base de datos de PostgreSQL como origen de DMS
- Tipos de datos de origen para PostgreSQL
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 rolrds_replication
. El rol derds_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) |
Sí |
No |
Aurora PostgreSQL versión 2.2 con compatibilidad de PostgreSQL 10.6 (o superiores) |
Sí |
Sí |
RDS para PostgreSQL compatible con PostgreSQL 10.21 (o superiores) |
Sí |
Sí |
Para habilitar la replicación lógica en una instancia de base de datos de RDS para PostgreSQL
-
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.
-
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ámetroswal_level
,max_wal_senders
,max_replication_slots
ymax_connections
. Estos cambios de parámetros pueden aumentar la generación de registros de escritura anticipada (WAL), así que solo debe establecerrds.logical_replication
cuando utilice ranuras de replicación lógica. -
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. -
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 demax_logical_replication_workers
,autovacuum_max_workers
ymax_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 establecemax_worker_processes
encima del valor predeterminado. -
Cuando utilice Aurora PostgreSQL como origen con CDC, establezca
synchronous_commit
enON
.
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
-
Elija el esquema donde deben crearse los objetos. El esquema predeterminado es
public
. Asegúrese de que el esquema exista y que la cuenta
pueda obtener acceso a él.OtherThanMaster
-
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
-
Cree la tabla
awsdms_ddl_audit
mediante la ejecución del siguiente comando, sustituyendo
en el código siguiente por el nombre del esquema que se va a utilizar.objects_schema
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 ); -
Cree la función
awsdms_intercept_ddl
. Para ello, ejecute el siguiente comando y sustituya
en el código siguiente por el nombre del esquema que se va a utilizar.objects_schema
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 intoobjects_schema
.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete fromobjects_schema
.awsdms_ddl_audit; end if; END; $$; -
Cierre sesión en la cuenta
e inicie sesión con una cuenta que tenga el rolOtherThanMaster
rds_superuser
asignado. -
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(); -
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 |
Sí |
Amazon RDS PostgreSQL 9.5 o versiones anteriores |
No |
Amazon RDS PostgreSQL 9.6 o versiones superiores |
Sí |
Aurora PostgreSQL 1.x hasta 2.5.x |
No |
Aurora PostgreSQL 2.6.x o versiones superiores |
Sí |
Aurora PostgreSQL 3.3.x o versiones superiores |
Sí |
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.
-
Para obtener información sobre cómo habilitar la replicación lógica para CDC en bases de datos de origen PostgreSQL autoadministradas, consulte Habilitación de CDC con una base de datos de PostgreSQL autoadministrada como origen de AWS DMS
-
Para obtener información sobre cómo habilitar la replicación lógica para CDC en bases de datos de origen PostgreSQL administradas por AWS, consulte Habilitación de CDC con una instancia de base de datos de PostgreSQL administrada por AWS con AWS DMS.
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
-
Cree una extensión pglogical en la base de datos PostgreSQL de origen:
-
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
enpglogical
en el mismo grupo de parámetros de RDS.
-
-
Reinicie la base de datos de origen de PostgreSQL.
-
En la base de datos PostgreSQL, ejecute el comando,
create extension pglogical;
-
-
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
-
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
. -
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;
-
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
yreplication-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 vistapg_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
-
Cree una ranura de replicación, como se muestra a continuación:
SELECT * FROM pg_create_logical_replication_slot('
replication_slot_name
', 'pglogical'); -
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
-
Cree un nodo pglogical.
SELECT pglogical.create_node(node_name := '
node_name
', dsn := 'your_dsn_name
'); -
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); -
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); -
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
enTEST_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 usarREPLICA IDENTITY FULL
detenidamente para cada tabla comoFULL
, 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 |
---|---|
|
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: Valores válidos: true/false Ejemplo: |
|
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 Valor predeterminado: Valores válidos: falso/verdadero Ejemplo: |
|
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: |
|
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: |
|
Cuando se establece en 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: |
|
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: Valores válidos: Number Ejemplo de ECA: |
|
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 Valor predeterminado: Valores válidos: true/false Ejemplo: |
|
Establece la frecuencia del latido de WAL (en minutos). Valor predeterminado: Valores válidos: Number Ejemplo: |
|
Establece el esquema en el que se crearon los artefactos de latido. Valor predeterminado: Valores válidos: string Ejemplo: |
|
De forma predeterminada, AWS DMS asigna JSONB a NCLOB. Puede especificar Ejemplo: |
|
De forma predeterminada, AWS DMS asigna VARCHAR a WSTRING. Puede especificar
Ejemplo: |
|
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: Valores válidos: Ejemplo: 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 notaUse El uso de No use |
|
Especifica el complemento que se va a utilizar para crear una ranura de replicación. Valores válidos: Ejemplo: |
|
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 Para obtener más información sobre la configuración del parámetro de solicitud Valores válidos: string Ejemplo: |
|
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
oTRUNCATE
). -
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 datosbit
con valores incoherentes. Como solución alternativa, cree previamente la tabla con un tipo datosVARCHAR(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 yrestart_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 datosNUMERIC
pero sin precisión ni escala, DMS utilizaNUMERIC(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 amax_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 amax_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 amax_num_chars_text
multiplicado por 4.