Usar um banco de dados PostgreSQL como origem do AWS DMS
É possível migrar dados de um ou de vários bancos de dados PostgreSQL utilizando o AWS DMS. Com um banco de dados PostgreSQL como origem, é possível migrar dados para outro banco de dados PostgreSQL ou para um dos outros bancos de dados compatíveis.
Para obter informações sobre as versões do PostgreSQL compatíveis com o AWS DMS como origem, consulte Origens do AWS DMS.
O AWS DMS é compatível com o PostgreSQL para estes tipos de bancos de dados:
-
Bancos de dados on-premises
-
Bancos de dados em uma instância do Amazon EC2
-
Bancos de dados em uma instância de banco de dados Amazon RDS
-
Bancos de dados em uma instância de banco de dados com base na edição do Amazon Aurora compatível com PostgreSQL
-
Bancos de dados em uma instância de banco de dados com base na edição Tecnologia Sem Servidor do Amazon Aurora compatível com o PostgreSQL
nota
O DMS é compatível com o Amazon Aurora PostgreSQL—com Tecnologia Sem Servidor V1 como origem somente para carga máxima. Mas é possível utilizar o Amazon Aurora PostgreSQL—com Tecnologia Sem Servidor V2 como origem para tarefas de carga máxima, carga máxima + CDC e CDC somente.
|
Versão da origem do PostgreSQL |
AWS DMSVersão do a ser usada |
|---|---|
|
9.x, 10.x, 11.x, 12.x |
Use qualquer versão do AWS DMS disponível. |
|
13.x |
Utilize o AWS DMS versão 3.4.3 e superior. |
|
14.x |
Utilize o AWS DMS versão 3.4.7 e superior. |
|
15.x |
Utilize o AWS DMS versão 3.5.1 e superior. |
|
16.x |
Utilize o AWS DMS versão 3.5.3 e superior. |
| 17.x |
Utilize o AWS DMS versão 3.6.1 e superior. |
É possível utilizar o Secure Socket Layers (SSL) para criptografar conexões entre o endpoint do PostgreSQL e a instância de replicação. Para obter mais informações sobre como utilizar o SSL com um endpoint do PostgreSQL, consulte Usar SSL com o AWS Database Migration Service.
O único requisito de segurança ao utilizar o PostgreSQL como origem é que a conta de usuário especificada deve ser de um usuário registrado no banco de dados PostgreSQL.
Para configurar um banco de dados PostgreSQL como um endpoint de origem do AWS DMS, faça o seguinte:
-
Crie um usuário do PostgreSQL com as permissões apropriadas para fornecer ao AWS DMS acesso ao banco de dados de origem PostgreSQL.
nota
-
Se o banco de dados de origem PostgreSQL for autogerenciado, consulte Como trabalhar com bancos de dados PostgreSQL autogerenciados como origem no AWS DMS para obter mais informações.
-
Se o banco de dados de origem PostgreSQL for gerenciado pelo Amazon RDS, consulte Como trabalhar com bancos de dados PostgreSQL gerenciados pela AWScomo origem do DMS para obter mais informações.
-
-
Crie um endpoint de origem do PostgreSQL que esteja em conformidade com a configuração do banco do dados PostgreSQL escolhida.
-
Crie uma tarefa ou um conjunto de tarefas para migrar as tabelas.
Para criar uma tarefa de somente carga máxima, nenhuma outra configuração de endpoint será necessária.
Antes de criar uma tarefa de captura de dados de alteração (uma tarefa de CDC somente ou de carga máxima e CDC), consulte Ativar a CDC utilizando um banco de dados PostgreSQL autogerenciado como origem do AWS DMS ou Ativar a CDC com uma instância de banco de dados PostgreSQL gerenciado pela AWS com o AWS DMS.
Tópicos
Como trabalhar com bancos de dados PostgreSQL autogerenciados como origem no AWS DMS
Como trabalhar com bancos de dados PostgreSQL gerenciados pela AWScomo origem do DMS
Ativar a captura de dados de alteração (CDC) utilizando replicação lógica
Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL
Migração do PostgreSQL para o PostgreSQL utilizando o AWS DMS
Migrar do Babelfish para o Amazon Aurora PostgreSQL usando o AWS DMS
Remover artefatos do AWS DMS de um banco de dados de origem PostgreSQL
Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS
Utilizar a configuração de endpoint MapBooleanAsBoolean do PostgreSQL
Limitações ao utilizar um banco de dados PostgreSQL como origem do DMS
Como trabalhar com bancos de dados PostgreSQL autogerenciados como origem no AWS DMS
Com um banco de dados PostgreSQL como origem, é possível migrar dados para outro banco de dados PostgreSQL ou para um dos outros bancos de dados compatíveis com o AWS DMS. A origem do banco de dados pode ser um banco de dados on-premises ou um mecanismo autogerenciado em execução em uma instância do Amazon EC2. É possível utilizar uma instância de banco de dados para tarefas de carga máxima e de captura de dados de alteração (CDC).
Pré-requisitos para a utilização de um banco de dados PostgreSQL como origem do AWS DMS
Antes de migrar dados de um banco de dados PostgreSQL de origem autogerenciado, faça o seguinte:
-
Utilize um banco de dados PostgreSQL com a versão 9.4.x ou superior.
-
Para tarefas de carga máxima mais CDC ou tarefas de somente CDC, conceda permissões de superusuário para a conta de usuário especificada para o banco de dados de origem do PostgreSQL. A conta de usuário precisa de permissões de superusuário para acessar perfis específicos de replicação na origem. A conta de usuário do DMS precisa de permissões SELECT em todas as colunas para migrar tabelas com êxito. No caso de perda de permissões nas colunas, o DMS cria uma tabela de destino usando mapeamentos regulares de tipos de dados do DMS, o que provoca diferenças nos metadados e falhas nas tarefas.
-
Adicione o endereço IP do servidor de replicação do AWS DMS ao arquivo de configuração
pg_hba.confe ative as conexões de replicação e de soquete. Veja a seguir um exemplo.# 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 md5O arquivo de configuração
pg_hba.confdo PostgreSQL controla a autenticação do cliente. (HBA significa autenticação baseada em host.) O arquivo é tradicionalmente armazenado no diretório de dados do cluster de banco de dados. -
Se estiver configurando um banco de dados como origem para replicação lógica utilizando o AWS DMS, consulte Ativar a CDC utilizando um banco de dados PostgreSQL autogerenciado como origem do AWS DMS
nota
Algumas transações do AWS DMS ficam ociosas por algum tempo antes que o mecanismo do DMS as utilize novamente. Com a utilização do parâmetro idle_in_transaction_session_timeout no PostgreSQL versões 9.6 e superior é possível fazer com que as transações ociosas atinjam o tempo limite e falhem. Não encerre transações ociosas quando você usar o AWS DMS.
Ativar a CDC utilizando um banco de dados PostgreSQL autogerenciado como origem do AWS DMS
O AWS DMS é compatível com a captura de dados de alteração (CDC) ao utilizar replicação lógica. Para ativar a replicação lógica de um banco de dados de origem do PostgreSQL autogerenciado, defina os seguintes parâmetros e valores no arquivo de configuração postgresql.conf:
-
Defina
wal_level = logical. -
Defina
max_replication_slotscomo um valor maior que 1.Defina o valor de
max_replication_slotsde acordo com o número de tarefas a serem executadas. Por exemplo, para executar cinco tarefas, defina no mínimo cinco slots. Os slots são abertos automaticamente assim que uma tarefa é iniciada e permanecem abertos até mesmo quando a tarefa não está mais em execução. Exclua manualmente os slots abertos. Observe que o DMS descarta automaticamente os slots de replicação quando a tarefa é excluída, se o DMS tiver criado o slot. -
Defina
max_wal_senderscomo um valor maior que 1.O parâmetro
max_wal_sendersdefine o número de tarefas simultâneas que podem ser executadas. -
O parâmetro
wal_sender_timeoutencerra as conexões de replicação que estão inativas por mais tempo do que o número de milissegundos especificado. O padrão para um banco de dados PostgreSQL on-premises é 60000 milissegundos (60 segundos). A definição do valor como 0 (zero) desativa o mecanismo de tempo limite e é uma configuração válida para o DMS.Ao definir
wal_sender_timeoutcomo um valor diferente de zero, uma tarefa do DMS com CDC requer um mínimo de 10000 milissegundos (10 segundos) e falha se o valor for menor que 10000. Mantenha o valor em menos de 5 minutos para evitar provocar um atraso durante um failover de multi-AZ de uma instância de replicação do DMS.
Alguns parâmetros são estáticos, e você só pode defini-los na inicialização do servidor. Quaisquer alterações nas entradas do arquivo de configuração (para um banco de dados autogerenciado) ou no grupo de parâmetros do banco de dados (para um banco de dados RDS para PostgreSQL) são ignoradas até que o servidor seja reiniciado. Para obter mais informações, consulte a Documentação do PostgreSQL
Para obter mais informações sobre como ativar a CDC, consulte Ativar a captura de dados de alteração (CDC) utilizando replicação lógica.
Como trabalhar com bancos de dados PostgreSQL gerenciados pela AWScomo origem do DMS
É possível utilizar uma instância de banco de dados PostgreSQL gerenciado pela AWS como origem do AWS DMS. É possível executar tarefas de carga máxima e tarefas de captura de dados de alteração (CDC) utilizando uma origem PostgreSQL gerenciado pela AWS.
Pré-requisitos para a utilização de um banco de dados PostgreSQL gerenciado pela AWS como origem do DMS
Antes de migrar dados de um banco de dados de origem PostgreSQL gerenciado pela AWS, faça o seguinte:
-
É recomendável utilizar uma conta de usuário da AWS com as permissões mínimas necessárias para a instância de banco de dados PostgreSQL como a conta de usuário do endpoint de origem do PostgreSQL do AWS DMS. A utilização de uma conta mestre não é recomendada. A conta deve ter o perfil
rds_superusere o perfilrds_replication. O perfilrds_replicationconcede permissões para gerenciar slots lógicos e transmitir dados utilizando slots lógicos.Crie vários objetos da conta do usuário mestre para a conta que você utiliza. Para obter mais informações sobre como criar esses objetos, consulte Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre.
-
Se o banco de dados de origem estiver em uma nuvem privada virtual (VPC), selecione o grupo de segurança da VPC que fornece acesso à instância de banco de dados em que o banco de dados reside. Isso é necessário para que a instância de replicação do DMS se conecte com êxito à instância de banco de dados de origem. Quando o banco de dados e a instância de replicação do DMS estiverem na mesma VPC, adicione o grupo de segurança apropriado às suas próprias regras de entrada.
nota
Algumas transações do AWS DMS ficam ociosas por algum tempo antes que o mecanismo do DMS as utilize novamente. Com a utilização do parâmetro idle_in_transaction_session_timeout no PostgreSQL versões 9.6 e superior é possível fazer com que as transações ociosas atinjam o tempo limite e falhem. Não encerre transações ociosas quando você usar o AWS DMS.
Ativar a CDC com uma instância de banco de dados PostgreSQL gerenciado pela AWS com o AWS DMS
O AWS DMS é compatível com a CDC em bancos de dados Amazon RDS PostgreSQL quando a instância de banco de dados está configurada para utilizar replicação lógica. A tabela a seguir resume a compatibilidade com a replicação lógica de cada versão do PostgreSQL gerenciado pela AWS.
|
Versão do PostgreSQL |
Compatibilidade do AWS DMS com carga máxima |
Compatibilidade do AWS DMS com CDC |
|---|---|---|
|
Aurora PostgreSQL versão 2.1 compatível com o PostgreSQL 10.5 (ou inferior) |
Sim |
Não |
|
Compatibilidade do Aurora PostgreSQL versão 2.2 com o PostgreSQL 10.6 (ou superior) |
Sim |
Sim |
|
Compatibilidade do RDS para PostgreSQL com o PostgreSQL 10.21 (ou superior) |
Sim |
Sim |
Como ativar a replicação lógica para uma instância de banco de dados RDS PostgreSQL
-
Utilize a conta de usuário mestre da AWS para a instância de banco de dados PostgreSQL como a conta de usuário do endpoint de origem PostgreSQL. A conta de usuário mestra tem as funções necessárias para permitir a configuração da captura de dados de alteração (CDC).
Se você utilizar uma conta diferente da conta de usuário mestre, deverá criar vários objetos da conta mestre para a conta utilizada. Para obter mais informações, consulte Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre.
-
Defina o parâmetro
rds.logical_replicationno grupo de parâmetros do CLUSTER do banco de dados como 1. Esse parâmetro estático requer uma reinicialização da instância de banco de dados para entrar em vigor. Como parte da aplicação desse parâmetro, o AWS DMS define os parâmetroswal_level,max_wal_senders,max_replication_slotsemax_connections. Essas alterações de parâmetros podem aumentar o log de gravação antecipada (WAL), portanto, só definards.logical_replicationao utilizar slots de replicação lógica. -
O parâmetro
wal_sender_timeoutencerra as conexões de replicação que estão inativas por mais tempo do que o número de milissegundos especificado. O padrão para um banco de dados PostgreSQL gerenciado pela AWS é 30000 milissegundos (30 segundos). A definição do valor como 0 (zero) desativa o mecanismo de tempo limite e é uma configuração válida para o DMS.Ao definir
wal_sender_timeoutcomo um valor diferente de zero, uma tarefa do DMS com CDC requer um mínimo de 10000 milissegundos (10 segundos) e falhará se o valor estiver entre 0 e 10000. Mantenha o valor em menos de 5 minutos para evitar provocar um atraso durante um failover de multi-AZ de uma instância de replicação do DMS. -
Verifique se o valor do parâmetro
max_worker_processesno grupo de parâmetros do cluster do banco de dados é igual ou superior aos valores totais combinados demax_logical_replication_workersautovacuum_max_workersemax_parallel_workers. Um alto número de processos de trabalho em segundo plano pode impactar as workloads das aplicações em instâncias pequenas. Portanto, monitore o desempenho do banco de dados se você definir um valor demax_worker_processesmais alto que o padrão. -
Ao usar o Aurora PostgreSQL como origem com CDC, defina
synchronous_commitcomoON.
Como utilizar a réplica de leitura do cluster de banco de dados multi-AZ do PostgreSQL para CDC (replicação contínua)
-
Defina os parâmetros
rds.logical_replicationesync_replication_slotsno grupo de parâmetros do CLUSTER de banco de dados como 1. Esses parâmetros estáticos requerem a reinicialização da instância de banco de dados para entrar em vigor. -
Execute o seguinte comando para criar a tabela
awsdms_ddl_auditno Gravador e substituir oobjects_schemapelo nome do esquema a ser utilizado: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 ); -
Execute o seguinte comando para criar uma função
awsdms_intercept_ddle substituir oobjects_schemapelo nome do esquema a ser utilizado: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; $$; -
Execute o seguinte comando para criar o gatilho de eventos
awsdms_intercept_ddl:CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();Verifique se todos os usuários e perfis que acessam esses eventos têm as permissões de DDL necessárias. Por exemplo:
grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public; -
Crie um slot de replicação no Gravador:
SELECT * FROM pg_create_logical_replication_slot('dms_read_replica_slot', 'test_decoding', false, true); -
Verifique se o slot de replicação está disponível no Leitor:
select * from pg_catalog.pg_replication_slots where slot_name = 'dms_read_replica_slot'; slot_name |plugin |slot_type|datoid|database|temporary|active|active_pid|xmin|catalog_xmin|restart_lsn|confirmed_flush_lsn|wal_status|safe_wal_size|two_phase|inactive_since |conflicting|invalidation_reason|failover|synced| ---------------------+-------------+---------+------+--------+---------+------+----------+----+------------+-----------+-------------------+----------+-------------+---------+-----------------------------+-----------+-------------------+--------+------+ dms_read_replica_slot|test_decoding|logical | 5|postgres|false |false | | |3559 |0/180011B8 |0/180011F0 |reserved | |true |2025-02-10 15:45:04.083 +0100|false | |false |false | -
Crie um endpoint de origem do DMS para a réplica de leitura e defina o nome do slot de replicação lógica por meio do atributo de conexão adicional:
slotName=dms_read_replica_slot; -
Crie e inicie a tarefa CDC/FL+CDC.
nota
Para migrações CDC/FL+CDC, o DMS considera o horário de início da tarefa como uma posição inicial da CDC. Todos os LSNs mais antigos do slot de replicação são ignorados.
Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre
Em alguns casos, é possível não utilizar a conta de usuário mestre para a instância de banco de dados Amazon RDS PostgreSQL que você está utilizando como origem. Nesses casos, crie vários objetos para capturar os eventos da linguagem de definição de dados (DDL). Crie esses objetos utilizando uma conta diferente da conta mestrr e, depois, crie um acionador na conta de usuário mestre.
nota
Se você definir a configuração do endpoint CaptureDdls como false no endpoint de origem, não precisará criar a tabela e o acionador a seguir no banco de dados de origem.
Utilize o procedimento a seguir para criar esses objetos.
Como criar objetos
-
Escolha um esquema onde os objetos serão criados. O esquema padrão é
public. Verifique se o esquema existe e pode ser acessado pela conta.OtherThanMaster -
Faça login na instância de banco de dados PostgreSQL utilizando uma conta de usuário diferente da conta mestre, aqui a conta
.OtherThanMaster -
Crie a tabela
awsdms_ddl_auditexecutando o comando a seguir, substituindono código seguinte pelo nome do esquema a ser utilizado.objects_schemaCREATE TABLEobjects_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 ); -
Crie o perfil
awsdms_intercept_ddlexecutando o comando a seguir, substituindono código seguinte pelo nome do esquema a ser utilizado.objects_schemaCREATE OR REPLACE FUNCTIONobjects_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; $$; -
Faça logout da conta
e faça login com uma conta que tenha o perfilOtherThanMasterrds_superuseratribuído. -
Crie o trigger de evento
awsdms_intercept_ddlexecutando o comando a seguir.CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDUREobjects_schema.awsdms_intercept_ddl(); -
Verifique se todos os usuários e perfis que acessam esses eventos têm as permissões de DDL necessárias. Por exemplo:
grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public;
Ao concluir o procedimento anterior, você poderá criar o endpoint de origem do AWS DMS utilizando a conta .OtherThanMaster
nota
Esses eventos são acionados pelas instruções CREATE TABLE, ALTER
TABLE e DROP TABLE.
Ativar a captura de dados de alteração (CDC) utilizando replicação lógica
É possível utilizar o recurso de replicação lógica nativa do PostgreSQL para ativar a captura de dados de alteração (CDC) durante a migração do banco de dados de origens do PostgreSQL. É possível utilizar esse recurso com o PostgreSQL autogerenciado e também com uma instância do banco de dados Amazon RDS para PostgreSQL. Essa abordagem reduz o tempo de inatividade e ajuda a garantir que o banco de dados de destino esteja sincronizado com o banco de dados PostgreSQL de origem.
O AWS DMS é compatível com a CDC para tabelas do PostgreSQL com chaves primárias. Se uma tabela não tiver uma chave primária, os logs de gravação antecipada (WAL) não incluirão uma imagem anterior da linha do banco de dados. Nesse caso, o DMS não pode atualizar a tabela. Aqui, é possível utilizar configurações adicionais e utilizar a identidade da réplica da tabela como uma solução alternativa. No entanto, essa abordagem pode gerar logs adicionais. É recomendável utilizar a identidade da réplica da tabela como solução alternativa somente após testes cuidadosos. Para obter mais informações, consulte Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS.
nota
A REPLICA IDENTITY FULL é compatível com um plug-in de decodificação lógica, mas não com um plug-in pglogical. Para obter mais informações, consulte a Documentação do pglogical
Para tarefas de carga máxima e de CDC e de somente CDC, o AWS DMS utiliza slots de replicação lógica para reter os logs WAL para replicação até que os logs sejam decodificados. Ao reiniciar (não ao retomar) para uma carga máxima e uma tarefa de CDC ou uma tarefa de somente de CDC, o slot de replicação é recriado.
nota
Para decodificação lógica, o DMS utiliza o plug-in test_decoding ou pglogical. Se o plug-in pglogical estiver disponível em um banco de dados PostgreSQL de origem, o DMS criará um slot de replicação utilizando pglogical, caso contrário, um plug-in test_decoding será utilizado. Para obter mais informações sobre o plug-in test_decoding, consulte a Documentação do PostgreSQL
Se o parâmetro max_slot_wal_keep_size do banco de dados for definido como um valor não padrão e o restart_lsn de um slot de replicação ficar atrás do LSN atual em mais do que esse tamanho, a tarefa do DMS falhará devido à remoção dos arquivos WAL necessários.
Configurar o plug-in pglogical
Implementado como uma extensão do PostgreSQL, o plug-in pglogical é um sistema de replicação lógica e um modelo para replicação seletiva de dados. A tabela a seguir identifica as versões de origem do banco de dados PostgreSQL que são compatíveis com o plug-in pglogical.
|
Origem PostgreSQL |
Compatível com o pglogical |
|---|---|
|
PostgreSQL 9.4 autogerenciado ou superior |
Sim |
|
Amazon RDS PostgreSQL 9.5 ou inferior |
Não |
|
Amazon RDS PostgreSQL 9.6 ou superior |
Sim |
|
Aurora PostgreSQL 1.x até 2.5.x |
Não |
|
Aurora PostgreSQL 2.6.x ou superior |
Sim |
|
Aurora PostgreSQL 3.3.x ou superior |
Sim |
Antes de configurar o pglogical para utilização com o AWS DMS, primeiro ative a replicação lógica para captura de dados de alteração (CDC) no banco de dados de origem PostgreSQL.
-
Para obter informações sobre como ativar a replicação lógica para CDC em bancos de dados de origem PostgreSQL autogerenciados, consulte Ativar a CDC utilizando um banco de dados PostgreSQL autogerenciado como origem do AWS DMS
-
Para obter informações sobre como ativar a replicação lógica para CDC em bancos de dados de origem PostgreSQL gerenciado pela AWS, consulte Ativar a CDC com uma instância de banco de dados PostgreSQL gerenciado pela AWS com o AWS DMS.
Depois que a replicação lógica estiver ativada no banco de dados de origem PostgreSQL, utilize as etapas a seguir para configurar o pglogical para utilização com o DMS.
Como utilizar o plug-in pglogical para replicação lógica em um banco de dados de origem PostgreSQL com o AWS DMS
-
Crie uma extensão de pglogical no banco de dados de origem PostgreSQL:
-
Defina o parâmetro correto:
-
Para bancos de dados PostgreSQL autogerenciados, defina o parâmetro
shared_preload_libraries= 'pglogical'do banco de dados. -
Para o PostgreSQL nos bancos de dados Amazon RDS e Amazon Aurora edição compatível com o PostgreSQL, defina o parâmetro
shared_preload_librariescomopglogicalno mesmo grupo de parâmetros do RDS.
-
-
Reinicie o banco de dados de origem PostgreSQL.
-
No banco de dados PostgreSQL, execute o comando
create extension pglogical;.
-
-
Execute o comando a seguir para verificar se a instalação do pglogical foi bem-sucedida:
select * FROM pg_catalog.pg_extension
Agora é possível criar uma tarefa do AWS DMS que executa a captura de dados de alteração do endpoint do banco de dados de origem PostgreSQL.
nota
Se você não ativar o pglogical no banco de dados de origem PostgreSQL, o AWS DMS utilizará o plug-in test_decoding por padrão. Quando pglogical está ativado para decodificação lógica, o AWS DMS utiliza o pglogical por padrão. Mas é possível definir o atributo de conexão adicional, para que o PluginName utilize o plug-in test_decoding em vez disso.
Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL
Para ativar os pontos de início nativos da CDC com o PostgreSQL como origem, defina o atributo de conexão adicional slotName como o nome de um slot de replicação lógica existente ao criar o endpoint. Esse slot de replicação lógica mantém as alterações contínuas desde a hora da criação do endpoint, portanto, ele é compatível com a replicação de um ponto no tempo.
O PostgreSQL grava as alterações do banco de dados em arquivos WAL que são descartados somente depois que o AWS DMS faz a leitura das alterações do slot de replicação lógica com êxito. O uso de slots de replicação lógica pode impedir que as alterações registradas sejam excluídas antes de serem consumidas pelo mecanismo de replicação.
No entanto, dependendo da taxa de alteração e consumo, as alterações mantidas em um slot de replicação lógica podem causar a utilização elevado do disco. É recomendável definir alarmes de utilização de espaço na instância de origem PostgreSQL ao utilizar slots de replicação lógica. Para obter mais informações sobre como definir o atributo de conexão adicional slotName, consulte Configurações de endpoint e atributos de conexão adicionais (ECAs) ao usar o PostgreSQL como origem do DMS.
O procedimento a seguir demonstra essa abordagem com mais detalhes.
Como utilizar um ponto inide início nativo da CDC para configurar uma carga de CDC de um endpoint de origem PostgreSQL
-
Identifique o slot de replicação lógica utilizado por uma tarefa de replicação anterior (uma tarefa pai) que você queira utilizar como ponto de partida. Consulte a visualização
pg_replication_slotsno banco de dados de origem para se certificar de que esse slot não tenha conexões ativas. Se isso acontecer, resolva-os e feche-os antes de continuar.Para as etapas a seguir, vamos supor que o slot de replicação lógica seja
abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef. -
Crie um novo endpoint de origem que inclua a configuração de atributo de conexão adicional a seguir.
slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef; -
Crie uma nova tarefa somente de CDC utilizando o console, a AWS CLI ou a API do AWS DMS. Por exemplo, utilizando a CLI, é possível executar o seguinte 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"No comando anterior, as seguintes opções são definidas:
-
A opção
source-endpoint-arné definida como o valor criado na etapa 2. -
A opção
replication-instance-arné definida como o mesmo valor da tarefa pai da etapa 1. -
As opções
table-mappingsereplication-task-settingssão definidas como os mesmos valores da tarefa pai na etapa 1. -
A opção
cdc-start-positioné definida como um valor de posição de início. Para localizar essa posição de início, consulte a visualizaçãopg_replication_slotsno banco de dados de origem ou visualize os detalhes do console da tarefa pai na etapa 1. Para obter mais informações, consulte Determinar um ponto de início de CDC nativo.
Para ativar o modo de início personalizado da CDC ao criar uma tarefa somente de CDC utilizando o console do AWS DMS, faça o seguinte:
Na seção Configurações da tarefa, em Modo de início da CDC para transações de origem, escolha Ativar o modo de início da CDC personalizado.
Em Ponto de início da CDC personalizado para transações de origem, escolha Especificar um número de sequência de log. Especifique o número de alteração do sistema ou escolha Especificar um ponto de verificação de recuperação e forneça um ponto de verificação de recuperação.
Quando essa tarefa de CDC for executada, o AWS DMS gerará um erro se o slot de replicação lógica especificado não existir. Ele também gerará um erro se a tarefa não for criada com uma configuração válida para
cdc-start-position. -
Ao utilizar pontos de início nativos da CDC com o plug-in pglogical e quiser utilizar um novo slot de replicação, conclua as etapas de configuração a seguir antes de criar uma tarefa de CDC.
Como utilizar um novo slot de replicação não criado anteriormente como parte de outra tarefa do DMS
-
Crie um slot de replicação, conforme mostrado a seguir:
SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical'); -
Depois que o banco de dados criar o slot de replicação, obtenha e anote os valores de restart_lsn e de confirmed_flush_lsn do slot:
select * from pg_replication_slots where slot_name like 'replication_slot_name';Observe que a posição de início da CDC nativo para uma tarefa de CDC criada após o slot de replicação não pode ser mais antiga do que o valor de confirmed_flush_lsn.
Para obter informações sobre os valores de restart_lsn e de confirmed_flush_lsn, consulte pg_replication_slots
-
Crie um nó pglogical.
SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name'); -
Crie dois conjuntos de replicação utilizando o perfil
pglogical.create_replication_set. O primeiro conjunto de replicação rastreia as atualizações e as exclusões das tabelas que têm chaves primárias. O segundo conjunto de replicação rastreia somente inserções e tem o mesmo nome do primeiro conjunto de replicação, com o prefixo 'i' adicionado.SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false); SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true); -
Adicione uma tabela ao conjunto de réplicas.
SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true); SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true); -
Defina o atributo de conexão adicional (ECA) a seguir ao criar o endpoint de origem.
PluginName=PGLOGICAL;slotName=slot_name;
Agora é possível criar uma tarefa somente de CDC com um ponto de início nativo do PostgreSQL utilizando o novo slot de replicação. Para obter mais informações sobre o plug-in pglogical, consulte a Documentação do pglogical 3.7
Migração do PostgreSQL para o PostgreSQL utilizando o AWS DMS
Ao migrar de um mecanismo de banco de dados diferente do PostgreSQL para um banco de dados PostgreSQL, o AWS DMS quase sempre é a melhor ferramenta de migração a ser utilizada. No entanto, ao migrar de um banco de dados PostgreSQL para um banco de dados PostgreSQL, as ferramentas do PostgreSQL podem ser mais eficazes.
Utilize ferramentas nativas do PostgreSQL para migrar dados
É recomendável utilizar ferramentas nativas de migração do banco de dados PostgreSQL, como pg_dump, nas seguintes condições:
-
Quando há uma migração homogênea, na qual você migra de um banco de dados PostgreSQL de origem para um banco de dados PostgreSQL de destino.
-
Quando for migrar um banco de dados inteiro.
-
As ferramentas nativas permitem que você migre os dados com um tempo mínimo de inatividade.
O utilitário pg_dump utiliza o comando COPY para criar um esquema e um despejo de dados de um banco de dados PostgreSQL. O script de despejo gerado pelo pg_dump carrega os dados em um banco de dados com o mesmo nome e recria as tabelas, os índices e as chaves estrangeiras. Para restaurar os dados para um banco de dados com outro nome, utilize o comando pg_restore e o parâmetro -d.
Se estiver migrando dados de um banco de dados de origem PostgreSQL sendo executado no EC2 para um destino Amazon RDS para PostgreSQL, você poderá utilizar o plug-in pglogical.
Para obter mais informações sobre como importar de um banco de dados PostgreSQL para o Amazon RDS para PostgreSQL ou para a edição do Amazon Aurora compatível com PostgreSQL, consulte https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html.
Utilizar o DMS para migrar dados do PostgreSQL para o PostgreSQL
O AWS DMS pode migrar dados, por exemplo, de um banco de dados PostgreSQL de origem que está on-premises para um Amazon RDS para PostgreSQL de destino ou uma instância do Aurora PostgreSQL. Os tipos de dados do PostgreSQL fundamentais ou básicos geralmente migram com êxito.
nota
Ao replicar tabelas particionadas de uma origem PostgreSQL para o destino PostgreSQL, você não precisa mencionar a tabela pai como parte dos critérios de seleção na tarefa do DMS. Mencionar a tabela principal faz com que os dados sejam duplicados nas tabelas filho no destino, possivelmente causando uma violação de PK. Ao selecionar apenas as tabelas filho nos critérios de seleção do mapeamento de tabelas, a tabela pai é preenchida automaticamente.
Tipos de dados compatíveis com o banco de dados de origem, mas não são incompatíveis no destino, podem não ser migrados corretamente. O AWS DMS transmite alguns tipos de dados como strings se o tipo de dados for desconhecido. Alguns tipos de dados, como XML e JSON, podem ser migrados com êxito como arquivos pequenos, mas podem falhar se forem documentos grandes.
Ao executar a migração do tipo de dados, lembre-se de que:
-
Em alguns casos, o tipo de dados PostgreSQL NUMERIC(p,s) não especifica nenhuma precisão e escala. Nas versões 3.4.2 e anteriores do DMS, o DMS utiliza uma precisão de 28 e uma escala de 6 por padrão, NUMERIC(28,6). Por exemplo, o valor 0,611111104488373 da origem é convertido em 0,611111 no destino do PostgreSQL.
-
Uma tabela com o tipo de dados ARRAY deve ter uma chave primária. Uma tabela com um tipo de dados ARRAY sem uma chave primária é suspensa durante a carga máxima.
A tabela a seguir mostra os tipos de dados do PostgreSQL de origem e se podem ser migrados com êxito.
| Tipo de dados | Será migrado com êxito | Migra parcialmente | Não migra | Comentários |
|---|---|---|---|---|
| INTEGER | X | |||
| SMALLINT | X | |||
| BIGINT | X | |||
| NUMERIC/DECIMAL(p,s) | X | Em que 0<p<39 e 0<s | ||
| NUMERIC/DECIMAL | X | Em que p>38 ou p=s=0 | ||
| REAL | X | |||
| DOUBLE | X | |||
| SMALLSERIAL | X | |||
| SERIAL | X | |||
| BIGSERIAL | X | |||
| MONEY | X | |||
| CHAR | X | Sem precisão especificada | ||
| CHAR (n) | X | |||
| VARCHAR | X | Sem precisão especificada | ||
| VARCHAR(n) | X | |||
| TEXT | X | |||
| BYTEA | X | |||
| TIMESTAMP | X | Os valores infinitos positivos e negativos são truncados para '9999-12-31 23:59:59' e '4713-01-01 00:00:00 BC', respectivamente. | ||
| TIMESTAMP WITH TIME ZONE | X | |||
| DATE | X | |||
| TIME | X | |||
| TIME WITH TIME ZONE | X | |||
| INTERVAL | X | |||
| BOOLEAN | X | |||
| ENUM | X | |||
| CIDR | X | |||
| INET | X | |||
| MACADDR | X | |||
| TSVECTOR | X | |||
| TSQUERY | X | |||
| XML | X | |||
| POINT | X | Tipo de dados espaciais do PostGIS | ||
| LINE | X | |||
| LSEG | X | |||
| BOX | X | |||
| PATH | X | |||
| POLYGON | X | Tipo de dados espaciais do PostGIS | ||
| CIRCLE | X | |||
| JSON | X | |||
| ARRAY | X | Requer chave primária | ||
| COMPOSITE | X | |||
| RANGE | X | |||
| LINESTRING | X | Tipo de dados espaciais do PostGIS | ||
| MULTIPOINT | X | Tipo de dados espaciais do PostGIS | ||
| MULTILINESTRING | X | Tipo de dados espaciais do PostGIS | ||
| MULTIPOLYGON | X | Tipo de dados espaciais do PostGIS | ||
| GEOMETRYCOLLECTION | X | Tipo de dados espaciais do PostGIS |
Migrar tipos de dados espaciais do PostGIS
Dados espaciais identificam a informação de geometria de um objeto ou local no espaço. Os bancos de dados relacionais de objetos PostgreSQL são compatíveis com os tipos de dados espaciais do PostGIS.
Antes de migrar objetos de dados espaciais do PostgreSQL, verifique se o plug-in PostGIS está ativado no nível global. Isso garante que o AWS DMS crie colunas exatas de dados espaciais de origem para a instância de banco de dados de destino PostgreSQL.
Para migrações homogêneas de PostgreSQL para PostgreSQL, o AWS DMS é compatível com a migração de tipos e subtipos de objetos de dados geométricos e geográficos do PostGIS (coordenadas geodésicas), como o seguinte:
-
POINT
-
LINESTRING
-
POLYGON
-
MULTIPOINT
-
MULTILINESTRING
-
MULTIPOLYGON
-
GEOMETRYCOLLECTION
Migrar do Babelfish para o Amazon Aurora PostgreSQL usando o AWS DMS
Você pode migrar as tabelas de origem do Babelfish para Aurora PostgreSQL para qualquer endpoint de destino compatível usando o AWS DMS.
Ao criar seu endpoint de origem do AWS DMS utilizando o console do DMS, a API ou os comandos da CLI, você define a origem como o Amazon Aurora PostgreSQL e o nome do banco de dados como babelfish_db. Na seção Configurações de endpoint, garanta que DatabaseMode esteja definido como Babelfish e que BabelfishDatabaseName esteja definido como o nome do banco de dados do Babelfish T-SQL de origem. Em vez de usar a porta TCP 1433 do Babelfish, use a porta TCP 5432 do Aurora PostgreSQL.
Crie as tabelas antes de migrar os dados para garantir que o DMS utilize os tipos de dados e metadados de tabela corretos. Se você não criar as tabelas no destino antes de executar a migração, o DMS poderá criar as tabelas com tipos de dados e permissões incorretos.
Adicionar regras de transformação à tarefa de migração
Ao criar uma tarefa de migração para uma origem do Babelfish, inclua regras de transformação que garantam que o DMS utilize as tabelas de destino pré-criadas.
Se você definiu o modo de migração de vários bancos de dados ao definir seu cluster do Babelfish para PostgreSQL, adicione uma regra de transformação que renomeia o nome do esquema para o esquema do T-SQL. Por exemplo, se o nome do esquema do T-SQL for dbo e o nome do esquema do Babelfish para PostgreSQL for mydb_dbo, renomeie o esquema para dbo utilizando uma regra de transformação. Para encontrar o nome do esquema do PostgreSQL, consulte Arquitetura do Babelfish no Guia do usuário do Amazon Aurora.
Se você utilizar o modo de banco de dados único, não será necessário usar uma regra de transformação para renomear os esquemas de bancos de dados. Os nomes dos esquemas do PostgreSQL têm um mapeamento de um a um para os nomes dos esquemas no banco de dados T-SQL.
O exemplo de regra de transformação a seguir mostra como renomear o nome do esquema de mydb_dbo de volta para 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": [] } ] }
Limitações ao utilizar um endpoint de origem do PostgreSQL com tabelas do Babelfish
As limitações a seguir se aplicam ao utilizar um endpoint de origem do PostgreSQL com tabelas do Babelfish:
O DMS é compatível somente com a migração do Babelfish versão 16.2/15.6 e posterior e do DMS versão 3.5.3 e posterior.
O DMS não replica as alterações na definição de tabelas do Babelfish para o endpoint de destino. Uma solução alternativa para essa limitação é primeiro aplicar as alterações na definição das tabelas no destino e, em seguida, alterar a definição das tabelas na origem do Babelfish.
Quando você cria tabelas do Babelfish com o tipo de dados BYTEA, o DMS as converte para o tipo de dados
varbinary(max)ao migrar para o SQL Server como destino.O DMS não é compatível com o modo LOB completo para tipos de dados binários. Em vez disso, use o modo LOB limitado para tipos de dados binários.
O DMS não é compatível com a validação de dados no Babelfish como origem.
Para a definição da tarefa Modo de preparação da tabela de destino, use somente os modos Não fazer nada ou Truncar. Não utilize o modo Abandonar tabelas no destino. Ao utilizar Abandonar tabelas no destino, o DMS poderá criar as tabelas com tipos de dados incorretos.
Ao utilizar a replicação contínua (CDC ou carga máxima e CDC), defina o atributo de conexão adicional (ECA)
PluginNamecomoTEST_DECODING.-
O DMS não é compatível com replicação (CDC ou carga máxima e CDC) de tabelas particionadas no Babelfish como origem.
Remover artefatos do AWS DMS de um banco de dados de origem PostgreSQL
Para capturar eventos de DDL, o AWS DMS cria vários artefatos no banco de dados PostgreSQL quando uma tarefa de migração é iniciada. Quando a tarefa é concluída, é recomendável remover esses artefatos.
Para remover os artefatos, execute os comandos a seguir (na ordem em que são exibidos), em que {AmazonRDSMigration} é o esquema no qual os artefatos foram criados: O descarte de um esquema deve ser feito com extremo cuidado. Nunca descarte um esquema operacional, especialmente um esquema que seja público.
drop event trigger awsdms_intercept_ddl;
O gatilho de eventos não pertence a um esquema específico.
drop function {AmazonRDSMigration}.awsdms_intercept_ddl() drop table {AmazonRDSMigration}.awsdms_ddl_audit drop schema {AmazonRDSMigration}
Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS
É possível adicionar definições de configuração ao migrar dados de um banco de dados PostgreSQL de duas maneiras:
-
É possível adicionar valores ao atributo de conexão adicional para capturar eventos de DDL e especificar o esquema no qual os artefatos de banco de dados DDL operacionais são criados. Para obter mais informações, consulte Configurações de endpoint e atributos de conexão adicionais (ECAs) ao usar o PostgreSQL como origem do DMS.
-
É possível substituir os parâmetros da string de conexão. Escolha esta opção para realizar uma das seguintes ações:
-
Especifique os parâmetros internos do AWS DMS. Esses parâmetros são raramente necessários e, portanto, não são expostos na interface do usuário.
-
Especifique os valores de passagem (passthru) para o cliente de banco de dados específico. O AWS DMS inclui os parâmetros de passagem na string de conexão que é passada para o cliente de banco de dados.
-
-
Ao utilizar o parâmetro
REPLICA IDENTITYem nível de tabela nas versões 9.4 e superiores do PostgreSQL, é possível controlar as informações gravadas em logs de gravação antecipada (WALs). Em particular, ele faz isso para WALs que identificam linhas que são atualizadas ou excluídas. OREPLICA IDENTITY FULLregistra os valores antigos de todas as colunas na linha. UtilizeREPLICA IDENTITY FULLcom cuidado para cada tabela, já que oFULLgera uma quantidade adicional de WALs que podem não ser necessários. Para obter mais informações, consulte ALTER TABLE-REPLICA IDENTITY
Ler a réplica como origem do PostgreSQL
Use réplicas de leitura do PostgreSQL como origens de CDC no AWS DMS para reduzir a carga do banco de dados primário. Esse recurso está disponível no PostgreSQL 16.x e requer o AWS DMS versão 3.6.1 ou posterior. O uso de réplicas de leitura para processamento de CDC reduz o impacto operacional em seu banco de dados primário.
nota
A versão 16.x do Amazon RDS para PostgreSQL tem limitações quanto à replicação lógica de réplicas de leitura nas configurações three-AZ (TAZ). Para obter suporte completo à replicação lógica de réplicas de leitura em implantações TAZ, você deve usar o PostgreSQL versão 17.x ou posterior.
Pré-requisitos
Antes de usar uma réplica de leitura como origem de CDC para o AWS DMS, você deve habilitar a replicação lógica na instância de banco de dados primário e em sua réplica de leitura para criar decodificação lógica em uma réplica de leitura. Execute as seguintes ações:
-
Habilite a replicação lógica na instância de banco de dados primário e em sua réplica de leitura com quaisquer outros parâmetros de banco de dados necessários. Para ter mais informações, consulte Como trabalhar com bancos de dados PostgreSQL gerenciados pela AWS como origem do DMS.
-
Para tarefas somente de CDC, crie um slot de replicação na instância primária (gravadora). Para ter mais informações, consulte Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL. Essa ação é necessária, pois não é possível criar um slot de replicação em réplicas de leitura.
-
Para o PostgreSQL versão 16, o slot deve ser criado manualmente na réplica de leitura.
-
Para o PostgreSQL versão 17 e posterior, o slot de replicação deve ser criado no primário e sincronizado automaticamente com a réplica de leitura.
-
Ao usar tarefas de carga máxima + CDC ou somente de CDC, o AWS DMS pode gerenciar automaticamente slots de replicação lógica em instâncias primárias, mas não em réplicas de leitura. Para réplicas de leitura do PostgreSQL versão 16, você deve eliminar e recriar manualmente os slots de replicação antes de reiniciar uma tarefa (não a retomar). Ignorar essa etapa pode causar falhas na tarefa ou posições de início de CDC incorretas. A partir da versão 17 do PostgreSQL, a sincronização lógica de slots da instância primária automatiza esse processo.
Depois de concluir os pré-requisitos, você pode configurar seu endpoint de origem com a replicação SlotName da origem da réplica de leitura do AWS DMS nas configurações do endpoint e configurar sua tarefa do AWS DMS usando pontos de início da CDC nativos. Para ter mais informações, consulte Configurações de endpoint e atributos de conexão adicionais (ECAs) ao usar o PostgreSQL como origem do DMS e Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL.
Utilizar a configuração de endpoint MapBooleanAsBoolean do PostgreSQL
É possível utilizar as configurações de endpoint do PostgreSQL para mapear um booleano como um booleano da origem PostgreSQL para um destino Amazon Redshift. Por padrão, um tipo BOOLEAN é migrado como varchar(5). É possível especificar MapBooleanAsBoolean para permitir que o PostgreSQL migre o tipo booleano como booleano, conforme mostrado no exemplo a seguir.
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
Observe que você deve definir essa configuração nos endpoints de origem e de destino para que ela tenha efeito.
Como o MySQL não tem um tipo BOOLEAN, utilize uma regra de transformação em vez dessa configuração ao migrar dados BOOLEAN para o MySQL.
Configurações de endpoint e atributos de conexão adicionais (ECAs) ao usar o PostgreSQL como origem do DMS
É possível utilizar configurações de endpoint e de atributos de conexão adicionais (ECAs) para configurar o banco de dados de origem do PostgreSQL. Você especifica as configurações de endpoint ao criar o endpoint de origem utilizando o console do AWS DMS ou o comando create-endpoint na AWS CLI, com a sintaxe --postgre-sql-settings '{" do JSON.EndpointSetting":
"value", ...}'
A tabela a seguir mostra as configurações de endpoint e de ECAs que é possível utilizar com o PostgreSQL como origem.
| Nome do atributo | Descrição |
|---|---|
|
Para capturar eventos de DDL, o AWS DMS cria vários artefatos no banco de dados PostgreSQL quando a tarefa é iniciada. É possível remover esses artefatos posteriormente, conforme descrito em Remover artefatos do AWS DMS de um banco de dados de origem PostgreSQL. Se o valor estiver definido como falso, você não precisará criar tabelas ou acionadores no banco de dados de origem. Os eventos de DDL transmitidos são capturados. Valor padrão: Valores válidos: verdadeiro/falso Exemplo: |
|
|
Utilizado para controlar como as transações monolíticas com números de sequência de log (LSNs) duplicados são replicadas. Quando esse parâmetro é Valor padrão: Valores válidos: falso/verdadeiro Exemplo: |
|
Define o esquema no qual os artefatos do banco de dados da DDL operacional são criados. Valor padrão: público Valores válidos: string Exemplo: |
|
Desabilita o filtro de origem Unicode com o PostgreSQL, para valores transmitidos ao filtro de regra de seleção nos valores da coluna “Endpoint de origem”. Por padrão, o DMS realiza comparações entre filtros de origem usando uma string Unicode, o que pode fazer com que as pesquisas ignorem os índices nas colunas de texto e retardem as migrações. O suporte a Unicode só deve ser desabilitado quando o uso de um filtro de regra de seleção está em uma coluna de texto no banco de dados de origem que é indexada. Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: |
|
Define o tempo limite da instrução do cliente para a instância do PostgreSQL, em segundos. O valor padrão é de 60 segundos. Exemplo: |
|
Quando definido como Se a tarefa for definida como modo LOB limitado e essa opção estiver definida como true, a tarefa falhará em vez de truncar os dados de LOB. Valor padrão: falso Valores válidos: booleano Exemplo: |
|
|
Esse atributo de conexão adicional (ECA) define o número de linhas que o cursor buscará durante a operação de carga máxima. Dependendo dos recursos disponíveis na instância de replicação, é possível ajustar o valor para cima ou para baixo. Valor padrão: Valores válidos: número Exemplo de ECA: |
|
O recurso heartbeat WAL imita uma transação fictícia, de forma que os slots de replicação lógicos ociosos não mantenham os logs de WAL antigos que resultam em situações de armazenamento cheio na origem. Essa pulsação mantém Valor padrão: Valores válidos: verdadeiro/falso Exemplo: |
|
Define a frequência de pulsação WAL (em minutos). Valor padrão: Valores válidos: número Exemplo: |
|
Define o esquema no qual os artefatos de pulsação são criados. Valor padrão: Valores válidos: string Exemplo: |
|
Por padrão, o AWS DMS mapeia JSONB para NCLOB. É possível especificar Exemplo: |
|
Por padrão, o AWS DMS mapeia VARCHAR para WSTRING. É possível especificar
Exemplo: |
|
Esse parâmetro trata colunas com tipos de dados NUMERIC ilimitados como STRING para migrar com sucesso sem perder a precisão do valor numérico. Utilize esse parâmetro somente para replicação da origem do PostgreSQL para o destino do PostgreSQL ou bancos de dados compatíveis com o PostgreSQL. Valor padrão: Valores válidos: Exemplo: A utilização desse parâmetro pode resultar em alguma degradação do desempenho da replicação devido à transformação de numérico para string e de volta para numérico. Esse parâmetro é compatível para utilização pelo DMS versão 3.4.4 e superior notaUtilize A utilização de Não utilize |
|
|
Especifica o plug-in a ser utilizado para criar um slot de replicação. Valores válidos: Exemplo: |
|
|
Define o nome de um slot de replicação lógica criado anteriormente para uma carga CDC da instância do PostgreSQL de origem. Quando utilizado com o parâmetro de solicitação Para obter mais informações sobre como configurar o parâmetro de solicitação Valores válidos: string Exemplo: |
|
|
Esse atributo de conexão adicional (ECA) define o tamanho máximo de uma coluna de dados definida como de tipo VarChar sem um especificador de tamanho máximo. O padrão é 8.000 bytes. O valor máximo é de 10.485.760 bytes. |
Limitações ao utilizar um banco de dados PostgreSQL como origem do DMS
As limitações a seguir se aplicam à utilização do PostgreSQL como uma origem do AWS DMS:
-
O AWS DMS não funciona com o Amazon RDS para PostgreSQL 10.4 ou o Amazon Aurora para PostgreSQL 10.4 como origem ou destino.
-
Uma tabela capturada deve ter uma chave primária. Se uma tabela não tiver uma chave primária, o AWS DMS ignorará as operações de registro DELETE e UPDATE dessa tabela. Como solução alternativa, consulte Ativar a captura de dados de alteração (CDC) utilizando a replicação lógica.
Observação: não é recomendável migrar sem uma chave primária/índice exclusivo, caso contrário, limitações adicionais se aplicarão, como a capacidade de aplicação em “NÃO” lote, a capacidade de LOB completo, a validação de dados e a incapacidade de replicar para o destino do Redshift de forma eficiente.
-
O AWS DMS ignora uma tentativa de atualizar um segmento de chave primária. Nesses casos, o destino identifica a atualização como uma que não atualizou nenhuma linha. No entanto, como os resultados da atualização de uma chave primária no PostgreSQL são imprevisíveis, nenhum registro é gravado na tabela de exceções.
-
O AWS DMS não é compatível com a opção de execução Iniciar alterações do processo a partir do carimbo de data/hora.
-
O AWS DMS não replica alterações resultantes de operações de partição ou subpartição (
ADD,DROPouTRUNCATE). -
A replicação de várias tabelas com o mesmo nome, onde cada nome tem maiúsculas e minúsculas diferentes (por exemplo, table1, TABLE1 e Table1), pode causar um comportamento imprevisível. Devido a esse problema, o AWS DMS não é compatível com esse tipo de replicação.
-
Na maioria dos casos, o AWS DMS é compatível com o processamento de alterações de instruções CREATE, ALTER e DROP DDL para tabelas. O AWS DMS não será compatível com esse processamento de alteração se as tabelas forem mantidas em um perfil interno ou em um bloco de corpo de procedimento ou em outros constructos aninhados.
Por exemplo, a seguinte alteração não é capturada.
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; $$; -
Atualmente, os tipos de dados
booleanem uma origem do PostgreSQL são migrados para um destino do SQL Server como o tipo de dadosbitcom valores inconsistentes. Como solução alternativa, crie previamente a tabela com um tipo de dadosVARCHAR(1)para a coluna (ou deixe que o AWS DMS crie a tabela). Depois, deixe o processamento downstream tratar um "F" como Falso e um "T" como Verdadeiro. -
O AWS DMS não é compatível com o processamento de alterações em operações TRUNCATE.
-
O tipo de dados OID LOB não é migrado para o destino.
O AWS DMS é compatível com o tipo de dados PostGIS somente para migrações homogêneas.
-
Se a origem for um banco de dados PostgreSQL on-premises ou em uma instância do Amazon EC2, verifique se o plug-in de saída test_decoding está instalado no endpoint de origem. É possível encontrar esse plug-in no pacote contrib do PostgreSQL. Para obter mais informações sobre o plug-in de teste de decodificação, consulte a documentação do PostgreSQL
. -
O AWS DMS não é compatível com a alteração de processamento para configurar e desconfigurar valores padrão de colunas (utilizando a cláusula ALTER COLUMN SET DEFAULT em instruções ALTER TABLE).
-
O AWS DMS não é compatível com a alteração de processamento para definir a nulidade de colunas (utilizando a cláusula ALTER COLUMN [SET|DROP] NOT NULL em instruções ALTER TABLE).
-
Quando a replicação lógica está ativada, o número máximo de alterações mantidas na memória por transação é de 4 MB. Depois disso, as alterações são transferidas para o disco. Como resultado,
ReplicationSlotDiskUsageaumenta erestart_lsnnão avança até que a transação seja concluída ou interrompida e a reversão seja concluída. Como é uma transação longa, ela pode demorar muito tempo para reverter. Portanto, evite transações de longa execução ou várias subtransações quando a replicação lógica estiver habilitada. Em vez disso, divida a transação em várias transações menores.Nas versões 13 e posteriores do Aurora PostgreSQL, você pode ajustar o parâmetro
logical_decoding_work_mempara controlar quando o DMS despeja dados de alteração para o disco. Para obter mais informações, consulte Arquivos de despejo no Aurora PostgreSQL. -
Uma tabela com o tipo de dados ARRAY deve ter uma chave primária. Uma tabela com um tipo de dados ARRAY sem uma chave primária é suspensa durante a carga máxima.
-
O AWS DMS não oferece suporte à migração de metadados de tabela relacionados ao particionamento ou herança de tabelas
. Quando o AWS DMS encontra uma tabela particionada ou uma tabela que usa herança, o seguinte comportamento é observado: -
O AWS DMS identifica e relata as tabelas principal e secundária envolvidas no particionamento ou na herança no banco de dados de origem.
-
Criação de tabela no destino: no banco de dados de destino, o AWS DMS cria a tabela como uma tabela padrão (não particionada, não herdada), preservando a estrutura e as propriedades das tabelas selecionadas, mas não a lógica de particionamento ou herança.
-
Diferenciação de registros em tabelas herdadas: para tabelas que usam herança, o AWS DMS não distingue registros pertencentes a tabelas secundárias ao preencher a tabela principal. Por isso, ele não utiliza consultas SQL com sintaxe, como
SELECT * FROM ONLY parent_table_name.
-
-
Para replicar tabelas particionadas de uma origem PostgreSQL para um destino PostgreSQL, primeiro crie manualmente as tabelas pai e filho no destino. Defina uma tarefa separada a fim de replicar nessas tabelas. Nesse caso, defina a configuração da tarefa como Truncar antes de carregar.
-
O tipo de dados
NUMERICdo PostgreSQL não tem um tamanho fixo. Na transferência de dados do tipoNUMERICsem precisão e escala, o DMS utilizaNUMERIC(28,6)(uma precisão de 28 e escala 6) por padrão. Por exemplo, o valor 0,611111104488373 da origem é convertido em 0,611111 no destino do PostgreSQL. -
O AWS DMS é compatível com o Aurora PostgreSQL Serverless V1 como origem somente para tarefas de carga máxima. O AWS DMS é compatível com o Aurora PostgreSQL Serverless V2 como origem para tarefas de carga máxima, de carga máxima e CDC e de somente CDC.
-
O AWS DMS não é compatível com a replicação de uma tabela com um índice exclusivo criado com um perfil de agrupamento.
-
Se a definição da chave primária na origem e no destino não corresponder, os resultados da replicação poderão ser imprevisíveis.
-
Ao utilizar o recurso Carga paralela, a segmentação de tabelas de acordo com partições ou subpartições não é compatível. Para obter mais informações sobre Carga paralela, consulte Utilizar carga paralela para tabelas, visualizações e coleções selecionadas.
-
O AWS DMS não é compatível com restrições adiadas.
-
O AWS DMS versão 3.4.7 é compatível com o PostgreSQL 14.x como origem com estas limitações:
-
O AWS DMS não é compatível com o processamento de alterações de confirmações em duas fases.
-
O AWS DMS não é compatível com a replicação lógica para transmitir transações longas em andamento.
-
-
O AWS DMS não é compatível com a CDC para Amazon RDS Proxy para PostgreSQL como origem.
-
Ao utilizar filtros de origem que não contêm uma coluna de chave primária, as operações
DELETEnão serão capturadas. -
Se o banco de dados de origem também for um destino para outro sistema de replicação de terceiros, as alterações de DDL podem não ser migradas durante a CDC. Porque essa situação pode impedir que o acionador de eventos
awsdms_intercept_ddlseja acionado. Para contornar a situação, modifique esse acionador no banco de dados de origem da seguinte maneira:alter event trigger awsdms_intercept_ddl enable always; -
No AWS DMS, não é possível replicar as alterações feitas nas definições de chave primária no banco de dados de origem. Se a estrutura da chave primária for alterada durante uma tarefa de replicação ativa, as alterações subsequentes nas tabelas afetadas não serão replicadas para o destino.
-
Na replicação de DDL como parte de um script, o número total máximo de comandos de DDL por script é 8.192 e o número total máximo de linhas por script é 8.192 linhas.
-
Não é possível usar visões materializadas no AWS DMS.
-
Para tarefas de carga máxima e CDC usando uma réplica de leitura como origem, o AWS DMS não consegue criar slots de replicação em réplicas de leitura.
Tipos de dados de origem para o PostgreSQL
A tabela a seguir mostra os tipos de dados de origem PostgreSQL compatíveis com a utilização do AWS DMS e o mapeamento padrão dos tipos de dados do AWS DMS.
Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.
Para obter mais informações sobre os tipos de dados do AWS DMS, consulte Tipos de dados do AWS Database Migration Service.
|
Tipos de dados do PostgreSQL |
Tipos de dados do DMS |
|---|---|
|
INTEGER |
INT4 |
|
SMALLINT |
INT2 |
|
BIGINT |
INT8 |
|
NUMERIC (p,s) |
Se a precisão estiver entre 0 e 38, use NUMERIC. Se a precisão for maior ou igual a 39, use STRING. |
|
DECIMAL(P,S) |
Se a precisão estiver entre 0 e 38, use NUMERIC. Se a precisão for maior ou igual a 39, use STRING. |
|
REAL |
REAL4 |
|
DOUBLE |
REAL8 |
|
SMALLSERIAL |
INT2 |
|
SERIAL |
INT4 |
|
BIGSERIAL |
INT8 |
|
MONEY |
NUMERIC(38,4) O tipo de dados MONEY é mapeado para FLOAT no SQL Server. |
|
CHAR |
WSTRING (1) |
|
CHAR(N) |
WSTRING (n) |
|
VARCHAR(N) |
WSTRING (n) |
|
TEXT |
NCLOB |
|
CITEXT |
NCLOB |
|
BYTEA |
BLOB |
|
TIMESTAMP |
DATETIME |
|
TIMESTAMP WITH TIME ZONE |
DATETIME |
|
DATE |
DATE |
|
TIME |
TIME |
|
TIME WITH TIME ZONE |
TIME |
|
INTERVAL |
STRING (128)—1 YEAR, 2 MONTHS, 3 DAYS, 4 HOURS, 5 MINUTES, 6 SECONDS |
|
BOOLEAN |
CHAR (5) falso ou verdadeiro |
|
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) |
Como trabalhar com tipos de dados de origem LOB para PostgreSQL
Os tamanhos de colunas do PostgreSQL afetam a conversão de tipos de dados LOB do PostgreSQL em tipos de dados do AWS DMS. Para trabalhar com isso, siga estas etapas para os seguintes tipos de dados do AWS DMS:
-
BLOB: defina Limitar tamanho de LOB em o valor de Tamanho máximo de LOB (KB) na criação da tarefa.
-
CLOB: a replicação trata cada caractere como um caractere UTF8. Portanto, localize o tamanho do texto de caracteres mais longo na coluna, mostrado aqui como
max_num_chars_text. Utilize esse tamanho para especificar o valor de Limitar o tamanho do LOB em. Se os dados incluírem caracteres de 4 bytes, multiplique por 2 para especificar o valor de Limitar o valor de LOB em, que é em bytes. Nesse caso, Limitar o tamanho de LOB para será igual amax_num_chars_textmultiplicado por 2. -
NCLOB: a replicação trata cada caractere como um caractere de byte duplo. Portanto, localize o tamanho do texto de caracteres mais longo na coluna (
max_num_chars_text) e multiplique por 2. Faça isso para especificar o valor de Limitar o tamanho do LOB em. Nesse caso, Limitar o tamanho de LOB para será igual amax_num_chars_textmultiplicado por 2. Se os dados incluírem caracteres de 4 bytes, multiplique por 2 novamente. Nesse caso, Limitar o tamanho de LOB para será igual amax_num_chars_textmultiplicado por 4.