Configurar o banco de dados PostgreSQL de origem para migrações contínuas

Nesta página, descrevemos como configurar as instâncias de banco de dados de origem para migrações homogêneas padrão do PostgreSQL. Se você quiser usar as migrações de início rápido, siga o guia Usar migrações de início rápido. As migrações de início rápido oferecem um fluxo de migração simplificado que usa a replicação do pgnative e a conectividade especializada com base nas interfaces do Private Service Connect. Para mais informações, consulte Sobre as migrações de início rápido na documentação principal do Database Migration Service.

Esta página inclui seções para cada origem compatível:

Configurar uma origem do PostgreSQL autogerenciada

Para configurar uma instância de origem do PostgreSQL autogerenciada (no local ou hospedada em uma VM do Compute Engine) para o processo de migração, faça o seguinte:

  1. Para origens autogerenciadas do PostgreSQL, o Database Migration Service migra todos os bancos de dados na instância de origem, exceto os bancos de dados de modelo template0 e template1.
  2. Verifique se a instância de origem inclui o banco de dados postgres padrão. Se esse banco de dados não existir, crie-o antes de configurar a migração.
  3. Configure a autenticação do cliente de rede no arquivo pg_hba.conf. Adicione entradas que permitam conexões de replicação e acesso ao banco de dados pelo endereço IP de saída do Cloud SQL de destino, pelo intervalo CIDR da VPC ou pelo Bastion Host de SSH reverso:
    # Allow replication connections
    host  replication  MIGRATION_USER_ACCOUNT_NAME  DESTINATION_IP_OR_CIDR  md5
    # Allow database access
    host  all          MIGRATION_USER_ACCOUNT_NAME  DESTINATION_IP_OR_CIDR  md5

    Recarregue a configuração do PostgreSQL para aplicar as regras pg_hba.conf:

    SELECT pg_reload_conf();
  4. Verifique as extensões do PostgreSQL instaladas nos bancos de dados de origem. O Database Migration Service não migra extensões que não são compatíveis com o Cloud SQL. Verifique se os objetos do banco de dados de origem e as consultas do aplicativo não fazem referência a extensões incompatíveis. Remova as extensões e referências não compatíveis dos bancos de dados de origem antes de continuar.

    A extensão pg_cron não é migrada automaticamente pelo Database Migration Service, mas é compatível com destinos do Cloud SQL para PostgreSQL. Se você usar pg_cron no banco de dados de origem, reinstale e configure-o na instância de destino depois de promover a migração.

  5. Crie uma conta de usuário de migração dedicada na instância de origem e conceda a ela os privilégios necessários:
    1. Conecte-se à instância de origem usando uma conta de administrador, crie o usuário e atribua a função de replicação:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH REPLICATION;
    2. Conceda à conta de usuário de migração as permissões necessárias para o banco de dados postgres padrão e para todos os bancos de dados que você quer migrar. Execute os seguintes comandos em cada banco de dados para cada esquema (exceto o esquema de informações e os esquemas que começam com pg_):
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. Instale a extensão pglogical em cada banco de dados que você quer migrar, exceto template0 e template1:
    • Para o PostgreSQL versão 9.4:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • Para o PostgreSQL versão 9.5 e mais recentes:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
  7. Verifique se as tabelas têm chaves primárias. Para migrações contínuas, a replicação lógica do PostgreSQL exige que as tabelas tenham chaves primárias para replicar as operações UPDATE e DELETE durante a fase de captura de dados alterados (CDC):
    • As tabelas com uma chave primária replicam todas as operações INSERT, UPDATE e DELETE automaticamente.
    • Para tabelas sem chaves primárias, o Database Migration Service oferece suporte à migração apenas do snapshot inicial e das instruções INSERT subsequentes durante a fase de CDC. É preciso migrar as instruções UPDATE e DELETE manualmente.

      Recomendamos que você adicione chaves primárias às tabelas que não as têm antes de iniciar a migração. Para saber como gerar uma consulta para listar tabelas em um banco de dados PostgreSQL sem chaves primárias ou como migrar manualmente as operações UPDATE e DELETE, consulte Depuração e outras ferramentas.

      Como alternativa, tente usar o fluxo de migração de início rápido: um cenário de migração simplificado em que é possível usar REPLICA IDENTITY para migrar tabelas sem chaves primárias. Para mais informações, consulte o guia Usar migrações de início rápido.

  8. Origens que executam o PostgreSQL versão 9.5 e anteriores: a métrica de atraso de replicação não está disponível para instâncias de origem que executam versões do PostgreSQL anteriores à 9.6. Se você quiser usar essa métrica para acompanhar o progresso da migração, consulte Ativar o atraso de replicação.
  9. Instale o pacote pglogical e configure os parâmetros de WAL e replicação no servidor PostgreSQL:
    1. Instale o pacote pglogical no sistema operacional do host do servidor de banco de dados. Para pacotes e instruções de instalação da sua distribuição, consulte o repositório pglogical do GitHub.
    2. Conecte-se à instância do PostgreSQL usando uma conta de administrador e defina os seguintes parâmetros:
      1. Defina shared_preload_libraries para incluir 'pglogical':
        ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
      2. Defina wal_level como 'logical':
        ALTER SYSTEM SET wal_level = 'logical';

        Consulte wal_level na documentação do PostgreSQL.

      3. Defina wal_sender_timeout como 0:
        ALTER SYSTEM SET wal_sender_timeout = 0;

        O valor 0 desativa o mecanismo de tempo limite que encerra conexões de replicação inativas. Consulte wal_sender_timeout.

      4. Defina max_replication_slots como pelo menos o número de bancos de dados a serem migrados multiplicado pelo número de jobs de migração, além de reservas para sincronização de tabelas:

        Por exemplo, se houver cinco bancos de dados na instância de origem e você criar dois jobs de migração para essa origem, o número de slots de replicação precisará ser pelo menos 5 * 2 = 10, além do número de slots de replicação já usados na origem por outras tarefas. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de slots de replicação e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

        ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;

        O valor padrão desse parâmetro é 10. Consulte max_replication_slots.

      5. Defina max_wal_senders como pelo menos o valor de max_replication_slots mais o número de remetentes já usados na sua instância:

        Por exemplo, se o parâmetro max_replication_slots estiver definido como 10 e você já estiver usando dois remetentes, o número de processos de remetentes WAL em execução ao mesmo tempo será 10 + 2 = 12. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de remetentes e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

        ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;

        O valor padrão desse parâmetro é 10. Consulte max_wal_senders.

      6. Defina max_worker_processes como, pelo menos, o número de bancos de dados a serem migrados mais os processos de worker atuais na instância. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, considere dois processos de worker adicionais por conexão (até um máximo de 20 workers):
        ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;

        O valor padrão desse parâmetro é 8. Consulte max_worker_processes.

  10. Reinicie o servidor PostgreSQL para que as alterações de configuração entrem em vigor.

Configurar uma origem do Amazon RDS para PostgreSQL

Para configurar uma instância de origem do Amazon RDS para PostgreSQL no processo de migração, faça o seguinte:

  1. Para origens do Amazon RDS para PostgreSQL, o Database Migration Service migra todos os bancos de dados na instância de origem, exceto os bancos de dados de modelo template0, template1 e o banco de dados interno da AWS rdsadmin.
  2. Verifique se a instância de origem inclui o banco de dados postgres padrão. Se esse banco de dados não existir, crie-o antes de configurar a migração.
  3. Configure as regras de entrada do grupo de segurança da VPC do Amazon RDS. Permita conexões TCP de entrada na porta 5432 do endereço IP de saída do Cloud SQL de destino, do intervalo CIDR da VPC ou da VM do Bastion Host de SSH reverso.
  4. Verifique as extensões do PostgreSQL instaladas nos bancos de dados de origem. O Database Migration Service não migra extensões que não são compatíveis com o Cloud SQL. Verifique se os objetos do banco de dados de origem e as consultas do aplicativo não fazem referência a extensões incompatíveis. Remova as extensões e referências não compatíveis dos bancos de dados de origem antes de continuar.

    A extensão pg_cron não é migrada automaticamente pelo Database Migration Service, mas é compatível com destinos do Cloud SQL para PostgreSQL. Se você usar pg_cron no banco de dados de origem, reinstale e configure-o na instância de destino depois de promover a migração.

  5. Crie uma conta de usuário de migração dedicada na instância de origem e conceda a ela os privilégios necessários:
    1. Conecte-se à instância de origem usando uma conta de administrador, crie o usuário e conceda o papel rds_replication gerenciado pela AWS:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      GRANT rds_replication TO "MIGRATION_USER_ACCOUNT_NAME";
    2. Conceda à conta de usuário de migração as permissões necessárias para o banco de dados postgres padrão e para todos os bancos de dados que você quer migrar. Execute os seguintes comandos em cada banco de dados para cada esquema (exceto o esquema de informações e os esquemas que começam com pg_):
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. Instale a extensão pglogical em cada banco de dados que você quer migrar, exceto template0, template1 e rdsadmin:
    • Para o PostgreSQL versão 9.4:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • Para o PostgreSQL versão 9.5 e mais recentes:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;

    Para mais detalhes sobre os requisitos, consulte Como usar extensões do PostgreSQL com o Amazon RDS para PostgreSQL na documentação da AWS.

  7. Verifique se as tabelas têm chaves primárias. Para migrações contínuas, a replicação lógica do PostgreSQL exige que as tabelas tenham chaves primárias para replicar as operações UPDATE e DELETE durante a fase de captura de dados alterados (CDC):
    • As tabelas com uma chave primária replicam todas as operações INSERT, UPDATE e DELETE automaticamente.
    • Para tabelas sem chaves primárias, o Database Migration Service oferece suporte à migração apenas do snapshot inicial e das instruções INSERT subsequentes durante a fase de CDC. É preciso migrar as instruções UPDATE e DELETE manualmente.

      Recomendamos que você adicione chaves primárias às tabelas que não as têm antes de iniciar a migração. Para saber como gerar uma consulta para listar tabelas em um banco de dados PostgreSQL sem chaves primárias ou como migrar manualmente as operações UPDATE e DELETE, consulte Depuração e outras ferramentas.

      Como alternativa, tente usar o fluxo de migração de início rápido: um cenário de migração simplificado em que é possível usar REPLICA IDENTITY para migrar tabelas sem chaves primárias. Para mais informações, consulte o guia Usar migrações de início rápido.

  8. Origens que executam o PostgreSQL versão 9.5 e anteriores: a métrica de atraso de replicação não está disponível para instâncias de origem que executam versões do PostgreSQL anteriores à 9.6. Se você quiser usar essa métrica para acompanhar o progresso da migração, consulte Ativar o atraso de replicação.
  9. Configure um grupo de parâmetros de banco de dados personalizado e anexe-o à instância:
    1. Crie um grupo de parâmetros personalizado (consulte Como trabalhar com grupos de parâmetros de banco de dados na documentação da AWS) e configure os seguintes parâmetros:
      1. Defina shared_preload_libraries para incluir pglogical.
      2. Defina rds.logical_replication como 1. Esse parâmetro ativa a geração de registros WAL lógicos no Amazon RDS. Consulte Replicação lógica do Amazon RDS para PostgreSQL.
      3. Defina wal_sender_timeout como 0. O valor 0 desativa o mecanismo de tempo limite que encerra conexões de replicação inativas.
      4. Defina max_replication_slots como pelo menos o número de bancos de dados a serem migrados multiplicado pelo número de jobs de migração, além de reservas para sincronização de tabelas:

        Por exemplo, se houver cinco bancos de dados na instância de origem e você criar dois jobs de migração para essa origem, o número de slots de replicação precisará ser pelo menos 5 * 2 = 10, além do número de slots de replicação já usados na origem por outras tarefas. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de slots de replicação e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

        O valor padrão desse parâmetro é 10.

      5. Defina max_wal_senders como pelo menos o valor de max_replication_slots mais o número de remetentes já usados na sua instância:

        Por exemplo, se o parâmetro max_replication_slots estiver definido como 10 e você já estiver usando dois remetentes, o número de processos de remetentes WAL em execução ao mesmo tempo será 10 + 2 = 12. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de remetentes e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

        O valor padrão desse parâmetro é 10.

      6. Defina max_worker_processes como, pelo menos, o número de bancos de dados a serem migrados mais os processos de worker atuais na instância. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, considere dois processos de worker adicionais por conexão (até um máximo de 20 workers):

        O valor padrão desse parâmetro é 8.

    2. Anexe o grupo de parâmetros à instância de banco de dados do RDS. Se você estiver criando uma nova instância, essa opção estará em Configuração adicional. Caso contrário, modifique a instância para anexar o grupo de parâmetros.
  10. Reinicie a instância do Amazon RDS para que as alterações no grupo de parâmetros entrem em vigor.

Configurar uma origem do Amazon Aurora para PostgreSQL

Para configurar um cluster de origem do Amazon Aurora PostgreSQL para o processo de migração, faça o seguinte:

  1. Para origens do Amazon Aurora para PostgreSQL, o Database Migration Service migra todos os bancos de dados no cluster de origem, exceto os bancos de dados de modelo template0, template1 e o banco de dados interno da AWS rdsadmin.
  2. Verifique se o cluster de origem inclui o banco de dados postgres padrão. Se esse banco de dados não existir, crie-o antes de configurar a migração.
  3. Configure as regras de entrada do grupo de segurança da VPC do cluster do Amazon Aurora. Permita conexões TCP de entrada na porta 5432 do endereço IP de saída do Cloud SQL de destino, do intervalo CIDR da VPC ou da VM do Bastion Host de SSH reverso.
  4. Verifique as extensões do PostgreSQL instaladas nos bancos de dados de origem. O Database Migration Service não migra extensões que não são compatíveis com o Cloud SQL. Verifique se os objetos do banco de dados de origem e as consultas do aplicativo não fazem referência a extensões incompatíveis. Remova as extensões e referências não compatíveis dos bancos de dados de origem antes de continuar.

    A extensão pg_cron não é migrada automaticamente pelo Database Migration Service, mas é compatível com destinos do Cloud SQL para PostgreSQL. Se você usar pg_cron no banco de dados de origem, reinstale e configure-o na instância de destino depois de promover a migração.

  5. Crie uma conta de usuário de migração dedicada no cluster de origem e conceda a ela os privilégios necessários:
    1. Conecte-se ao cluster de origem usando uma conta de administrador, crie o usuário e conceda o papel rds_replication gerenciado pela AWS:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      GRANT rds_replication TO "MIGRATION_USER_ACCOUNT_NAME";
    2. Conceda à conta de usuário de migração as permissões necessárias para o banco de dados postgres padrão e para todos os bancos de dados que você quer migrar. Execute os seguintes comandos em cada banco de dados para cada esquema (exceto o esquema de informações e os esquemas que começam com pg_):
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. Instale a extensão pglogical em cada banco de dados que você quer migrar, exceto template0, template1 e rdsadmin:
    CREATE EXTENSION IF NOT EXISTS pglogical;
  7. Verifique se as tabelas têm chaves primárias. Para migrações contínuas, a replicação lógica do PostgreSQL exige que as tabelas tenham chaves primárias para replicar as operações UPDATE e DELETE durante a fase de captura de dados alterados (CDC):
    • As tabelas com uma chave primária replicam todas as operações INSERT, UPDATE e DELETE automaticamente.
    • Para tabelas sem chaves primárias, o Database Migration Service oferece suporte à migração apenas do snapshot inicial e das instruções INSERT subsequentes durante a fase de CDC. É preciso migrar as instruções UPDATE e DELETE manualmente.

      Recomendamos que você adicione chaves primárias às tabelas que não as têm antes de iniciar a migração. Para saber como gerar uma consulta para listar tabelas em um banco de dados PostgreSQL sem chaves primárias ou como migrar manualmente as operações UPDATE e DELETE, consulte Depuração e outras ferramentas.

      Como alternativa, tente usar o fluxo de migração de início rápido: um cenário de migração simplificado em que é possível usar REPLICA IDENTITY para migrar tabelas sem chaves primárias. Para mais informações, consulte o guia Usar migrações de início rápido.

  8. Configure um grupo de parâmetros personalizado do cluster de banco de dados e anexe-o ao cluster:
    1. Crie um grupo de parâmetros de cluster de banco de dados personalizado e configure os seguintes parâmetros:
      1. Defina shared_preload_libraries para incluir pglogical.
      2. Defina rds.logical_replication como 1. Esse parâmetro ativa a geração de registros lógicos do WAL.
      3. Defina wal_sender_timeout como 0. O valor 0 desativa o mecanismo de tempo limite que encerra conexões de replicação inativas.
      4. Defina max_replication_slots como pelo menos o número de bancos de dados a serem migrados multiplicado pelo número de jobs de migração, além de reservas para sincronização de tabelas:

        Por exemplo, se houver cinco bancos de dados na instância de origem e você criar dois jobs de migração para essa origem, o número de slots de replicação precisará ser pelo menos 5 * 2 = 10, além do número de slots de replicação já usados na origem por outras tarefas. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de slots de replicação e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

        O valor padrão desse parâmetro é 10.

      5. Defina max_wal_senders como pelo menos o valor de max_replication_slots mais o número de remetentes já usados na sua instância:

        Por exemplo, se o parâmetro max_replication_slots estiver definido como 10 e você já estiver usando dois remetentes, o número de processos de remetentes WAL em execução ao mesmo tempo será 10 + 2 = 12. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de remetentes e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

        O valor padrão desse parâmetro é 10.

      6. Defina max_worker_processes como, pelo menos, o número de bancos de dados a serem migrados mais os processos de worker atuais na instância. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, considere dois processos de worker adicionais por conexão (até um máximo de 20 workers):

        O valor padrão desse parâmetro é 8.

    2. Anexe o grupo de parâmetros do cluster de banco de dados ao cluster de banco de dados do Aurora.
  9. Reinicie o cluster de banco de dados do Amazon Aurora para que as alterações no grupo de parâmetros entrem em vigor.

Configurar uma origem do Microsoft Azure Database para PostgreSQL Flexible Server

Para configurar uma instância de origem do Microsoft Azure Database para PostgreSQL Flexible Server no processo de migração, faça o seguinte:

  1. Para origens do Banco de Dados do Microsoft Azure para PostgreSQL Flexible Server, o Database Migration Service migra todos os bancos de dados na instância de origem, exceto os bancos de dados de sistema e de modelo do Azure: azure_maintenance, azure_sys, template0 e template1.
  2. Verifique se a instância de origem inclui o banco de dados postgres padrão. Se esse banco de dados não existir, crie-o antes de configurar a migração.
  3. Defina as configurações de firewall e SSL/TLS do Azure:
    1. Nas configurações de rede do Azure, adicione regras de firewall que permitam conexões TCP de entrada na porta 5432 do endereço IP de saída do Cloud SQL de destino, do intervalo CIDR da VPC ou da VM do Bastion Host de SSH reverso.
    2. Verifique o valor do parâmetro de servidor require_secure_transport. Por padrão, os bancos de dados do Azure exigem criptografia SSL/TLS para conexões de entrada. Dependendo da configuração de require_secure_transport, selecione uma das seguintes configurações de criptografia ao criar o perfil de conexão de origem:
      • Se require_secure_transport estiver definido como on, selecione Basic, TLS ou mTLS.
      • Se require_secure_transport estiver definido como off, selecione Nenhum.
  4. Verifique as extensões do PostgreSQL instaladas nos bancos de dados de origem. O Database Migration Service não migra extensões que não são compatíveis com o Cloud SQL. Verifique se os objetos do banco de dados de origem e as consultas do aplicativo não fazem referência a extensões incompatíveis. Remova as extensões e referências não compatíveis dos bancos de dados de origem antes de continuar.

    A extensão pg_cron não é migrada automaticamente pelo Database Migration Service, mas é compatível com destinos do Cloud SQL para PostgreSQL. Se você usar pg_cron no banco de dados de origem, reinstale e configure-o na instância de destino depois de promover a migração.

  5. Crie uma conta de usuário de migração dedicada na instância de origem e conceda a ela os privilégios necessários:
    1. Conecte-se à instância de origem usando uma conta de administrador, crie o usuário e atribua a função de replicação:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH REPLICATION;
    2. Conceda à conta de usuário de migração as permissões necessárias para o banco de dados postgres padrão e para todos os bancos de dados que você quer migrar. Execute os seguintes comandos em cada banco de dados para cada esquema (exceto o esquema de informações e os esquemas que começam com pg_):
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. Instale a extensão pglogical em cada banco de dados que você quer migrar, exceto azure_maintenance, azure_sys, template0 e template1:
    • Para o PostgreSQL versão 9.4:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • Para o PostgreSQL versão 9.5 e mais recentes:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
  7. Verifique se as tabelas têm chaves primárias. Para migrações contínuas, a replicação lógica do PostgreSQL exige que as tabelas tenham chaves primárias para replicar as operações UPDATE e DELETE durante a fase de captura de dados alterados (CDC):
    • As tabelas com uma chave primária replicam todas as operações INSERT, UPDATE e DELETE automaticamente.
    • Para tabelas sem chaves primárias, o Database Migration Service oferece suporte à migração apenas do snapshot inicial e das instruções INSERT subsequentes durante a fase de CDC. É preciso migrar as instruções UPDATE e DELETE manualmente.

      Recomendamos que você adicione chaves primárias às tabelas que não as têm antes de iniciar a migração. Para saber como gerar uma consulta para listar tabelas em um banco de dados PostgreSQL sem chaves primárias ou como migrar manualmente as operações UPDATE e DELETE, consulte Depuração e outras ferramentas.

      Como alternativa, tente usar o fluxo de migração de início rápido: um cenário de migração simplificado em que é possível usar REPLICA IDENTITY para migrar tabelas sem chaves primárias. Para mais informações, consulte o guia Usar migrações de início rápido.

  8. Origens que executam o PostgreSQL versão 9.5 e anteriores: a métrica de atraso de replicação não está disponível para instâncias de origem que executam versões do PostgreSQL anteriores à 9.6. Se você quiser usar essa métrica para acompanhar o progresso da migração, consulte Ativar o atraso de replicação.
  9. Configure os seguintes parâmetros de servidor no Azure. Para mais informações, consulte Configurar parâmetros de servidor no Banco de Dados do Azure para PostgreSQL.
    1. Defina shared_preload_libraries para incluir pglogical.
    2. Defina azure.extensions para incluir pglogical.
    3. Defina wal_level como logical.
    4. Defina wal_sender_timeout como 0. O valor 0 desativa o mecanismo de tempo limite que encerra conexões de replicação inativas.
    5. Defina max_replication_slots como pelo menos o número de bancos de dados a serem migrados multiplicado pelo número de jobs de migração, além de reservas para sincronização de tabelas:

      Por exemplo, se houver cinco bancos de dados na instância de origem e você criar dois jobs de migração para essa origem, o número de slots de replicação precisará ser pelo menos 5 * 2 = 10, além do número de slots de replicação já usados na origem por outras tarefas. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, aumente o número de slots de replicação e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

      O valor padrão desse parâmetro é 10.

    6. Defina max_wal_senders como pelo menos o valor de max_replication_slots mais o número de remetentes já usados na sua instância:

      Por exemplo, se o parâmetro max_replication_slots estiver definido como 10 e você já estiver usando dois remetentes, o número de processos de remetentes WAL em execução ao mesmo tempo será 10 + 2 = 12. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de remetentes e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

      O valor padrão desse parâmetro é 10.

    7. Defina max_worker_processes como, pelo menos, o número de bancos de dados a serem migrados mais os processos de worker atuais na instância. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, considere dois processos de worker adicionais por conexão (até um máximo de 20 workers):

      O valor padrão desse parâmetro é 8.

    Para mais detalhes sobre os parâmetros, consulte a lista de todos os parâmetros de servidor no Banco de Dados do Azure para PostgreSQL na documentação da Microsoft.

  10. Reinicie a instância do Microsoft Azure Database para PostgreSQL Flexible Server para que as alterações nos parâmetros do servidor entrem em vigor.

Configurar uma origem do Cloud SQL para PostgreSQL

Para configurar uma instância de origem do Cloud SQL para PostgreSQL no processo de migração, faça o seguinte:

  1. Para origens do Cloud SQL para PostgreSQL, o Database Migration Service migra todos os bancos de dados na instância de origem, exceto os bancos de dados de modelo template0 e template1.
  2. Verifique se a instância de origem inclui o banco de dados postgres padrão. Se esse banco de dados não existir, crie-o antes de configurar a migração.
  3. Se você migrar de uma instância de origem do Cloud SQL configurada com um endereço IP privado para uma instância de destino do Cloud SQL que usa um intervalo de endereços IP não RFC 1918, adicione o intervalo não RFC 1918 às redes autorizadas da instância de origem. Para mais informações, consulte Configurar redes autorizadas.
  4. Verifique as extensões do PostgreSQL instaladas nos bancos de dados de origem. O Database Migration Service não migra extensões que não são compatíveis com o Cloud SQL. Verifique se os objetos do banco de dados de origem e as consultas do aplicativo não fazem referência a extensões sem suporte. Remova as extensões e referências não compatíveis dos bancos de dados de origem antes de continuar.

    A extensão pg_cron não é migrada automaticamente pelo Database Migration Service, mas é compatível com destinos do Cloud SQL para PostgreSQL. Se você usar pg_cron no banco de dados de origem, reinstale e configure-o na instância de destino depois de promover a migração.

  5. Crie uma conta de usuário de migração dedicada na instância de origem e conceda a ela os privilégios necessários:
    1. Siga as etapas na página Criar um usuário na documentação do Cloud SQL.
    2. Conceda à conta de usuário de migração as permissões necessárias para o banco de dados postgres padrão e para todos os bancos de dados que você quer migrar. Execute os seguintes comandos em cada banco de dados para cada esquema (exceto o esquema de informações e os esquemas que começam com pg_):
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. Instale a extensão pglogical em cada banco de dados que você quer migrar, exceto template0 e template1:
    • Para o PostgreSQL versão 9.4:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • Para o PostgreSQL versão 9.5 e mais recentes:execute o seguinte comando:
      CREATE EXTENSION IF NOT EXISTS pglogical;
  7. Verifique se as tabelas têm chaves primárias. Para migrações contínuas, a replicação lógica do PostgreSQL exige que as tabelas tenham chaves primárias para replicar as operações UPDATE e DELETE durante a fase de captura de dados alterados (CDC):
    • As tabelas com uma chave primária replicam todas as operações INSERT, UPDATE e DELETE automaticamente.
    • Para tabelas sem chaves primárias, o Database Migration Service migra o snapshot inicial e as instruções INSERT subsequentes durante a fase de CDC. É preciso migrar as instruções UPDATE e DELETE manualmente.

      Recomendamos que você adicione chaves primárias às tabelas que não as têm antes de iniciar a migração. Para saber como gerar uma consulta para listar tabelas em um banco de dados PostgreSQL sem chaves primárias ou como migrar manualmente as operações UPDATE e DELETE, consulte Depuração e outras ferramentas.

      Como alternativa, tente usar o fluxo de migração de início rápido: um cenário de migração simplificado em que é possível usar REPLICA IDENTITY para migrar tabelas sem chaves primárias. Para mais informações, consulte o guia Usar migrações de início rápido.

  8. Origens que executam o PostgreSQL versão 9.5 e anteriores: a métrica de atraso de replicação não está disponível para instâncias de origem que executam versões do PostgreSQL anteriores à 9.6. Se você quiser usar essa métrica para acompanhar o progresso da migração, consulte Ativar o atraso de replicação.
  9. Configure as seguintes flags de banco de dados na instância de origem do Cloud SQL:
    1. Defina cloudsql.logical_decoding como on.
    2. Defina cloudsql.enable_pglogical como on.
    3. Defina wal_sender_timeout como 0. O valor 0 desativa o mecanismo de tempo limite que encerra conexões de replicação inativas.
    4. Defina max_replication_slots como pelo menos o número de bancos de dados a serem migrados multiplicado pelo número de jobs de migração, além de reservas para sincronização de tabelas.

      Por exemplo, se houver cinco bancos de dados na instância de origem e você criar dois jobs de migração para essa origem, o número de slots de replicação precisará ser pelo menos 5 * 2 = 10, além do número de slots de replicação já usados na origem por outras tarefas. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, aumente o número de slots de replicação e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

      O valor padrão dessa flag é 10.

    5. Defina max_wal_senders como pelo menos o valor de max_replication_slots mais o número de remetentes já usados na sua instância.

      Por exemplo, se a flag max_replication_slots estiver definida como 10 e você já estiver usando dois remetentes, o número de processos de remetentes WAL em execução ao mesmo tempo será 10 + 2 = 12. Se você planeja usar as configurações ajustadas de paralelismo de despejo de dados, aumente o número de remetentes e verifique sua configuração executando o teste do job de migração ao criar o job de migração.

      O valor padrão dessa flag é 10.

    6. Defina max_worker_processes como, pelo menos, o número de bancos de dados a serem migrados mais os processos de worker atuais na instância. Se você planeja usar configurações ajustadas de paralelismo de despejo de dados, considere dois processos de worker adicionais por conexão (até um máximo de 20 workers).

      O valor padrão dessa flag é 8.

    Para mais informações sobre como modificar flags, consulte Configurar flags de banco de dados na documentação do Cloud SQL.

  10. Reinicie a instância de origem do Cloud SQL para que as alterações na flag de banco de dados entrem em vigor.

A seguir