As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Utilizar um banco de dados PostgreSQL como destino do AWS Database Migration Service
É possível migrar dados para bancos de dados PostgreSQL usando o AWS DMS a partir de outro banco de dados PostgreSQL ou de um dos outros bancos de dados compatíveis.
Para obter informações sobre as versões do PostgreSQL que são compatíveis com o AWS DMS, consulte Metas para AWS DMS.
nota
-
O Amazon Aurora Sem Servidor está disponível como destino para o Amazon Aurora compatível com PostgreSQL. Para ter mais informações sobre o Amazon Aurora Sem Servidor, consulte Usar o Aurora Serverless v2 no Guia do usuário do Amazon Aurora.
-
Os clusters de banco de dados do Aurora Sem Servidor são acessíveis apenas de uma Amazon VPC e não podem utilizar um Endereço IP público. Portanto, se você tiver uma instância de replicação em uma região diferente da do Aurora PostgreSQL Sem Servidor, configure o Emparelhamento da VPC. Caso contrário, verifique a disponibilidade das regiões do Aurora PostgreSQL Sem Servidor e decida utilizar uma dessas regiões para o Aurora PostgreSQL Sem Servidor e a instância de replicação.
-
O recurso Babelfish está incorporado ao Amazon Aurora sem custo adicional. Para obter mais informações, consulte Utilizar o Babelfish para Aurora PostgreSQL como destino do AWS Database Migration Service.
O AWS DMS utiliza uma abordagem de tabela por tabela ao migrar dados de origem para o destino na fase de carga máxima. Não é possível garantir a ordem da tabela durante a fase de Carregamento total. As tabelas ficam dessincronizadas durante a fase de Carregamento total e enquanto transações em cache de tabelas individuais estão sendo aplicadas. Como resultado, restrições de integridade referencial ativa podem gerar falhas de tarefas durante a fase de Carregamento total.
No PostgreSQL, chaves externas (restrições de integridade referencial) são implementadas usando triggers. Durante a fase de Carregamento total, o AWS DMS carrega uma tabela por vez. Recomendamos que você desative as restrições de chave externa durante um carregamento total, usando um dos seguintes métodos:
-
Desative temporariamente todos os triggers da instância e conclua o carregamento total.
-
Use o parâmetro
session_replication_role
no PostgreSQL.
Em determinado momento, um trigger pode estar em um dos seguintes estados: origin
, replica
, always
, ou disabled
. Quando o parâmetro session_replication_role
é definido como replica
, apenas triggers no estado replica
ficam ativos, e eles são disparados quando chamados. Caso contrário, os triggers permanecem inativos.
PostgreSQL tem um mecanismo à prova de falhas para impedir que uma tabela seja truncada, mesmo quando session_replication_role
é definido. É possível utilizar isso como alternativa para desativar os acionadores, para ajudar a executar a carga máxima até a conclusão. Para isso, defina o modo de preparação da tabela de destino DO_NOTHING
. Caso contrário, as operações DROP e TRUNCATE falharão quando houver restrições de chave externa.
No Amazon RDS, é possível controlar esse parâmetro utilizando um grupo de parâmetros. Para uma instância do PostgreSQL em execução no Amazon EC2, é possível definir o parâmetro diretamente.
Para obter mais detalhes sobre como trabalhar com bancos de dados PostgreSQL como destino para o AWS DMS, consulte as seguintes seções:
Tópicos
- Limitações da utilização do PostgreSQL como destino do AWS Database Migration Service
- Requisitos de segurança ao utilizar um banco de dados PostgreSQL como destino do AWS Database Migration Service
- Configurações de endpoint e atributos de conexão adicionais (ECAs) ao usar o PostgreSQL como destino do AWS DMS
- Tipos de dados de destino do PostgreSQL
- Utilizar o Babelfish para Aurora PostgreSQL como destino do AWS Database Migration Service
Limitações da utilização do PostgreSQL como destino do AWS Database Migration Service
As seguintes limitações aplicam-se à utilização de um banco de dados PostgreSQL como destino para o AWS DMS:
-
Para migrações heterogêneas, o tipo de dados JSON é convertido internamente no tipo de dados CLOB nativo.
-
Em uma migração do Oracle para o PostgreSQL, se uma coluna no Oracle contiver um caractere NULL (valor hexadecimal U+0000), o AWS DMS converterá o caractere NULL em um espaço (valor hexadecimal U+0020). Isso deve-se a uma limitação do PostgreSQL.
-
O AWS DMS não é compatível com a replicação para uma tabela com um índice exclusivo criado com o perfil de agrupamento.
-
Se as tabelas utilizarem sequências, atualize o valor de
NEXTVAL
para cada sequência no banco de dados de destino depois de interromper a replicação do banco de dados de origem. O AWS DMS copia os dados do banco de dados de origem, mas não migra sequências para o destino durante a replicação contínua.
Requisitos de segurança ao utilizar um banco de dados PostgreSQL como destino do AWS Database Migration Service
Para fins de segurança, a conta de usuário usada para a migração de dados deve ser um usuário registrado em qualquer banco de dados PostgreSQL que você use como destino.
O endpoint de destino do PostgreSQL exige permissões mínimas de usuário para executar uma migração do AWS DMS. Consulte os exemplos a seguir.
CREATE USER newuser WITH PASSWORD 'your-password'; ALTER SCHEMA schema_name OWNER TO newuser;
Ou
GRANT USAGE ON SCHEMA schema_name TO myuser; GRANT CONNECT ON DATABASE postgres to myuser; GRANT CREATE ON DATABASE postgres TO myuser; GRANT CREATE ON SCHEMA schema_name TO myuser; GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser; GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
Configurações de endpoint e atributos de conexão adicionais (ECAs) ao usar o PostgreSQL como destino do AWS DMS
É possível utilizar configurações de endpoint e de atributos de conexão adicionais (ECAs) para configurar o banco de dados de destino do PostgreSQL.
Você especifica as configurações ao criar o endpoint de destino utilizando o console do AWS DMS ou o comando create-endpoint
na AWS CLI, com a sintaxe --postgre-sql-settings '{"
do JSON.EndpointSetting
":
"value"
, ...
}'
Você especifica os ECAs usando o parâmetro ExtraConnectionAttributes
para seu endpoint.
A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o PostgreSQL como destino.
Nome | Descrição |
---|---|
|
Especifica o tamanho máximo (em KB) de um arquivo .csv usado para transferir dados para o PostgreSQL. Valor padrão: 32768 KB (32 MB) Valores válidos: 1 a 1.048.576 KB (até 1.1 GB) 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: |
|
Esse atributo faz com que o AWS DMS ignore chaves externas e acionadores de usuário para reduzir o tempo necessário para carregar dados em massa. |
|
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: falso Valores válidos: falso/verdadeiro 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 |
|
Utilize esse atributo de conexão adicional (ECA) para transferir dados para operações de carga máxima utilizando o comando \COPY. Valor padrão: Valores válidos: verdadeiro/falso Exemplo de ECA: Observação: a definição do ECA como falso pode resultar em alguma degradação do desempenho da replicação devido à execução direta de INSERTs. |
|
Utilize esse atributo para alterar o comportamento padrão do tratamento da replicação de endpoints compatíveis com PostgreSQL que exigem alguma configuração adicional, como os endpoints do Babelfish. Valor padrão: Valores válidos: Exemplo: |
|
Utilize esse atributo para especificar o nome do banco de dados Babelfish T-SQL de destino que está sendo migrado. Isso será obrigatório se Exemplo: |
Tipos de dados de destino do PostgreSQL
O endpoint do banco de dados PostgreSQL para o AWS DMS é compatível com a maioria dos tipos de dados do banco de dados PostgreSQL. A tabela a seguir mostra os tipos de dados de destino do banco de dados PostgreSQL compatíveis com o AWS DMS e o mapeamento padrão relativo aos tipos de dados do AWS DMS.
Para obter mais informações sobre os tipos de dados do AWS DMS, consulte Tipos de dados do AWS Database Migration Service.
Tipo de dados do AWS DMS |
Tipo de dados do PostgreSQL |
---|---|
BOOLEAN |
BOOLEAN |
BLOB |
BYTEA |
BYTES |
BYTEA |
DATA |
DATA |
TIME |
TIME |
DATETIME |
Se a escala for de 0 a 6, use TIMESTAMP. Se a escala for de 7 a 9, use VARCHAR (37). |
INT1 |
SMALLINT |
INT2 |
SMALLINT |
INT4 |
INTEGER |
INT8 |
BIGINT |
NUMERIC |
DECIMAL (P,S) |
REAL4 |
FLOAT4 |
REAL8 |
FLOAT8 |
STRING |
Se o tamanho for de 1 a 21.845, use VARCHAR (tamanho em bytes). Se o tamanho for de 21.846 a 2.147.483.647, use VARCHAR (65535). |
UINT1 |
SMALLINT |
UINT2 |
INTEGER |
UINT4 |
BIGINT |
UINT8 |
BIGINT |
WSTRING |
Se o tamanho for de 1 a 21.845, use VARCHAR (tamanho em bytes). Se o tamanho for de 21.846 a 2.147.483.647, use VARCHAR (65535). |
NCLOB |
TEXT |
CLOB |
TEXT |
nota
Ao replicar de uma origem do PostgreSQL, o AWS DMS cria a tabela de destino com os mesmos tipos de dados para todas as colunas, além das colunas com tipos de dados definidos pelo usuário. Nesses casos, o tipo de dados é criado como "variante de caractere" no destino.
Utilizar o Babelfish para Aurora PostgreSQL como destino do AWS Database Migration Service
É possível migrar as tabelas de origem do SQL Server para um destino do Babelfish para Amazon Aurora PostgreSQL utilizando o AWS Database Migration Service. Com o Babelfish, o Aurora PostgreSQL compreende o dialeto do T-SQL, do SQL proprietário do Microsoft SQL Server, e é compatível com o mesmo protocolo de comunicação. Portanto, as aplicações escritas para o SQL Server agora podem funcionar com o Aurora com menos alterações no código. O recurso Babelfish está incorporado ao Amazon Aurora sem custo adicional. É possível ativar o Babelfish no cluster do Amazon Aurora no console do Amazon RDS.
Ao criar seu endpoint de destino do AWS DMS utilizando os comandos do console do AWS DMS, da API ou da CLI, especifique o mecanismo de destino como Amazon Aurora PostgreSQL e nomeie o banco de dados como babelfish_db. Na seção Configurações de endpoint, adicione configurações para definir DatabaseMode
como Babelfish
e BabelfishDatabaseName
para o nome do banco de dados Babelfish T-SQL de destino.
Adicionar regras de transformação à tarefa de migração
Ao definir uma tarefa de migração para um destino do Babelfish, inclua regras de transformação que garantam que o DMS utilize as tabelas T-SQL do Babelfish pré-criadas no banco de dados de destino.
Primeiro, adicione uma regra de transformação à tarefa de migração que coloque todos os nomes das tabelas em letras minúsculas. O Babelfish armazena em letras minúsculas no pg_class
catálogo do PostgreSQL os nomes das tabelas que você cria utilizando o T-SQL. No entanto, quando você tem tabelas do SQL Server com nomes em maiúsculas e minúsculas, o DMS cria as tabelas utilizando tipos de dados nativos do PostgreSQL em vez dos tipos de dados compatíveis com T-SQL. Por esse motivo, adicione uma regra de transformação que torne todos os nomes de tabelas em minúsculas. Observe que os nomes de coluna não devem ser mudados para minúsculas.
Se você utilizou o modo de migração de vários bancos de dados ao definir o cluster, adicione uma regra de transformação que renomeia o esquema original do SQL Server. Renomeie o esquema do SQL Server para incluir o nome do banco de dados T-SQL. Por exemplo, se o nome do esquema original do SQL Server for dbo
e o nome do banco de dados T-SQL for mydb
, renomeie o esquema para mydb_dbo
utilizando uma regra de transformação.
Se você utilizar o modo de banco de dados único, não será necessária uma regra de transformação para renomear os esquemas. Os nomes dos esquemas têm um mapeamento de um para um com o banco de dados T-SQL de destino no Babelfish.
O exemplo de regra de transformação a seguir torna todos os nomes de tabelas em minúsculas e renomeia o esquema original do SQL Server de dbo
para mydb_dbo
.
{ "rules": [ { "rule-type": "transformation", "rule-id": "566251737", "rule-name": "566251737", "rule-target": "schema", "object-locator": { "schema-name": "dbo" }, "rule-action": "rename", "value": "mydb_dbo", "old-value": null }, { "rule-type": "transformation", "rule-id": "566139410", "rule-name": "566139410", "rule-target": "table", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "convert-lowercase", "value": null, "old-value": null }, { "rule-type": "selection", "rule-id": "566111704", "rule-name": "566111704", "object-locator": { "schema-name": "dbo", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }
Limitações ao utilizar um endpoint de destino do PostgreSQL com tabelas do Babelfish
As limitações a seguir se aplicam ao utilizar um endpoint de destino do PostgreSQL com tabelas do Babelfish:
-
Para o modo 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. Nesse modo, o DMS cria as tabelas como tabelas do PostgreSQL que o T-SQL talvez não reconheça.
O AWS DMS não é compatível com o tipo de dados sql_variant.
-
O Babelfish não é compatível com os tipos de dados
HEIRARCHYID
,GEOMETRY
eGEOGRAPHY
. Para migrar esses tipos de dados, é possível adicionar regras de transformação para converter o tipo de dados emwstring(250)
. -
O Babelfish é compatível com a migração de tipos de dados
BINARY
,VARBINARY
eIMAGE
utilizando o tipo de dadosBYTEA
. Em versões anteriores do Aurora PostgreSQL, é possível utilizar o DMS para migrar essas tabelas para um Endpoint de destino do Babelfish. Não é necessário especificar um tamanho para o tipo de dadosBYTEA
, conforme mostrado no exemplo a seguir.[Picture] [VARBINARY](max) NULL
Altere o tipo de dados T-SQL anterior para o tipo de dados T-SQL compatível
BYTEA
.[Picture] BYTEA NULL
-
Para versões anteriores do Aurora PostgreSQL Babelfish, se você criar uma tarefa de migração para replicação contínua do SQL Server para o Babelfish utilizando endpoint de destino do PostgreSQL, precisará atribuir o tipo de dados
SERIAL
a qualquer tabela que utilize colunasIDENTITY
. Desde o Aurora PostgreSQL (versão 15.3/14.8 e superior) e do Babelfish (versão 3.2.0 e superior), a coluna de identidade é compatível e não é mais necessário atribuir o tipo de dados SERIAL. Para obter mais informações, consulte Utilizar SERIAL na seção Sequências e identidade do Manual de migração do SQL Server para o Aurora PostgreSQL. Crie a tabela no Babelfish, altere a definição da coluna da seguinte forma.[IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
Altere a anterior para a seguinte.
[IDCol] SERIAL PRIMARY KEY
O Aurora PostgreSQL compatível com o Babelfish cria uma sequência utilizando a configuração padrão e adiciona uma restrição
NOT NULL
à coluna. A sequência recém-criada se comporta como uma sequência normal (incrementada em 1) e não tem a opção deSERIAL
composta. -
Depois de migrar dados com tabelas que utilizam colunas
IDENTITY
ou o tipo de dadosSERIAL
, redefina o objeto de sequência baseado em PostgreSQL com base no valor máximo da coluna. Depois de executar uma carga máxima das tabelas, utilize a consulta T-SQL a seguir para gerar instruções para definir o seed do objeto de sequência associado.DECLARE @schema_prefix NVARCHAR(200) = '' IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db' SET @schema_prefix = db_name() + '_' SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''') ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));' FROM sys.tables tables JOIN sys.columns columns ON tables.object_id = columns.object_id WHERE columns.is_identity = 1 UNION ALL SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));' FROM information_schema.columns WHERE column_default LIKE 'nextval(%';
A consulta gera uma série de instruções SELECT que você executa para atualizar os valores máximos de IDENTITY e SERIAL.
-
Em versões do Babelfish anteriores à 3.2, o Modo LOB completo pode resultar em um erro de tabela. Se isso acontecer, crie uma tarefa separada para as tabelas que falharam no carregamento. Utilize o Modo LOB limitado para especificar o valor apropriado para o Tamanho máximo de LOB (KB). Outra opção é definir a configuração do atributo de conexão
ForceFullLob=True
do endpoint do SQL Server. -
Para versões do Babelfish anteriores à 3.2, a execução da validação de dados com tabelas do Babelfish que não utilizam chaves primárias baseadas em números inteiros gera uma mensagem de que uma chave exclusiva adequada não pode ser encontrada. Desde o Aurora PostgreSQL (versão 15.3/14.8 e superior) e do Babelfish (versão 3.2.0 e superior), a validação de dados para chaves primárias de número não inteiro é compatível.
-
Devido às diferenças de precisão no número de casas decimais de segundos, o DMS relata falhas na validação de dados para tabelas do Babelfish que utilizam tipos de dados
DATETIME
. Para suprimir essas falhas, é possível adicionar o seguinte tipo de regra de validação para os tipos de dadosDATETIME
.{ "rule-type": "validation", "rule-id": "3", "rule-name": "3", "rule-target": "column", "object-locator": { "schema-name": "dbo", "table-name": "%", "column-name": "%", "data-type": "datetime" }, "rule-action": "override-validation-function", "source-function": "case when ${column-name} is NULL then NULL else 0 end", "target-function": "case when ${column-name} is NULL then NULL else 0 end" }