> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Migre para o Managed Postgres usando replicação lógica

> Saiba como migrar seus dados do PostgreSQL para o ClickHouse Managed Postgres usando replicação lógica

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <Icon />
                <span>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Funcionalidade Beta. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Saiba mais.
                    </a>
                </u>
            </span>
        </div>;
};

Este guia fornece instruções passo a passo para migrar seu banco de dados PostgreSQL para o ClickHouse Managed Postgres usando a replicação lógica nativa do Postgres.

<div id="migration-logical-replication-prerequisites">
  ## Pré-requisitos
</div>

* Acesso ao seu banco de dados PostgreSQL de origem.
* `psql`,`pg_dump` e `pg_restore` instalados na sua máquina local. Isso é necessário para criar tabelas vazias no banco de dados de destino. Essas ferramentas normalmente são incluídas nas instalações do PostgreSQL. Caso contrário, você pode baixá-las no [site oficial do PostgreSQL](https://www.postgresql.org/download/).
* Seu banco de dados de origem deve estar acessível a partir do ClickHouse Managed Postgres. Certifique-se de que todas as regras de firewall ou configurações de Security Group necessárias permitam essa conectividade. Você pode obter o IP de saída da sua instância do Managed Postgres fazendo o seguinte:

```shell theme={null}
dig +short <your-managed-postgres-hostname>
```

<div id="migration-logical-replication-setup">
  ## A configuração
</div>

Para que a replicação lógica funcione, precisamos garantir que o banco de dados de origem esteja configurado corretamente. Estes são os principais requisitos:

* O banco de dados de origem deve ter `wal_level` definido como `logical`.
* O banco de dados de origem deve ter `max_replication_slots` definido para no mínimo `1`.
* Para RDS (que este guia usa como exemplo), você precisa garantir que seu grupo de parâmetros tenha `rds.logical_replication` definido como `1`.
* O usuário do banco de dados de origem deve ter o privilégio `REPLICATION`. No caso do RDS, execute:
  ```sql theme={null}
  GRANT rds_replication TO <your-username>;
  ```
* A role usada no banco de dados de destino deve ter privilégios de gravação nos objetos do banco de dados de destino:
  ```sql theme={null}
  GRANT USAGE ON SCHEMA <schema_i> TO subscriber_user;
  GRANT CREATE ON DATABASE destination_db TO subscriber_user;
  GRANT pg_create_subscription TO subscriber_user;

  -- Conceder permissões nas tabelas
  GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA <schema_i> TO subscriber_user;
  ```

Certifique-se de que o banco de dados de origem esteja configurado desta forma:

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/logical_replication/source-setup.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=6b096fae0ca8c8b23ba4c5cbb9281456" alt="Configuração da replicação do PostgreSQL de origem" size="md" border width="1400" height="932" data-path="images/managed-postgres/logical_replication/source-setup.png" />

<div id="migration-logical-replication-schema-dump">
  ## Dump apenas do schema do banco de dados de origem
</div>

Antes de configurar a replicação lógica, precisamos criar o schema no banco de dados ClickHouse Managed Postgres de destino. Podemos fazer isso criando um dump apenas do schema do banco de dados de origem usando `pg_dump`:

```shell theme={null}
pg_dump \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    -s \
    --format directory \
    -f rds-dump
```

Aqui:

* Substitua `<user>`, `<password>`, `<host>`, `<port>` e `<database>` pelas credenciais do banco de dados de origem.
* `-s` especifica que queremos um dump apenas do schema.
* `--format directory` especifica que queremos o dump no formato de diretório, que é adequado para o `pg_restore`.
* `-f rds-dump` especifica o diretório de saída dos arquivos de dump. Observe que esse diretório será criado automaticamente e não deve existir previamente.

No nosso caso, temos duas tabelas: `events` e `users`. `events` tem um milhão de linhas, e `users` tem mil linhas.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pg_dump_restore/source-setup.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=491bc2e86f385054c8116acb6720babe" alt="Configuração das tabelas de origem no PostgreSQL" size="xl" border width="3766" height="2312" data-path="images/managed-postgres/pg_dump_restore/source-setup.png" />

<div id="migration-pgdump-pg-restore-create-pg">
  ### Crie uma instância do Managed Postgres
</div>

Primeiro, certifique-se de ter uma instância do Managed Postgres configurada, de preferência na mesma região da origem. Você pode seguir o guia rápido [aqui](/pt-BR/products/managed-postgres/quickstart#create-postgres-database). Veja o que vamos provisionar neste guia:

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pg_dump_restore/create-pg-for-migration.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=d8cb2e9e932c81c2ad7d0ba62c8958da" alt="Criar instância do ClickHouse Managed Postgres" size="md" border width="1532" height="1570" data-path="images/managed-postgres/pg_dump_restore/create-pg-for-migration.png" />

<div id="migration-logical-replication-restore-schema">
  ## Restaurar o schema no ClickHouse Managed Postgres
</div>

Agora que temos o dump do schema, podemos restaurá-lo na nossa instância do ClickHouse Managed Postgres usando `pg_restore`:

```shell theme={null}
pg_restore \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    --verbose \
    rds-dump
```

Aqui:

* Substitua `<user>`, `<password>`, `<host>`, `<port>` e `<database>` pelas credenciais do seu banco de dados de destino no ClickHouse Managed Postgres.
* `--verbose` fornece uma saída detalhada durante o processo de restauração.
  Este comando criará todas as tabelas, índices, views e outros objetos de esquema no banco de dados de destino, sem dados.

No nosso caso, após executar esse comando, temos duas tabelas, e elas estão vazias:

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/logical_replication/target-initial-setup.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=093e10187738fb6c082c391d57a4a81e" alt="Configuração inicial do ClickHouse Managed Postgres de destino" size="xl" border width="2019" height="445" data-path="images/managed-postgres/logical_replication/target-initial-setup.png" />

<div id="migration-logical-replication-setup-replication">
  ## Configurar a replicação lógica
</div>

Com o schema em vigor, agora podemos configurar a replicação lógica do banco de dados de origem para o banco de dados de destino ClickHouse Managed Postgres. Isso envolve criar uma publicação no banco de dados de origem e uma assinatura no banco de dados de destino.

<div id="migration-logical-replication-create-publication">
  ### Crie uma publication no banco de dados de origem
</div>

Conecte-se ao banco de dados PostgreSQL de origem e crie uma publication que inclua as tabelas que você deseja replicar.

```sql theme={null}
CREATE PUBLICATION <pub_name> FOR TABLE table1, table2...;
```

<Info>
  Criar uma publication FOR ALL TABLES pode causar sobrecarga na rede se houver muitas tabelas. Recomenda-se especificar apenas as tabelas que você deseja replicar.
</Info>

<div id="migration-logical-replication-create-subscription">
  ### Crie uma assinatura no banco de dados ClickHouse Managed Postgres de destino
</div>

Em seguida, conecte-se ao seu banco de dados ClickHouse Managed Postgres de destino e crie uma assinatura que se conecte à publication no banco de dados de origem.

```sql theme={null}
CREATE SUBSCRIPTION demo_rds_subscription
CONNECTION 'postgresql://<user>:<password>@<host>:<port>/<database>'
PUBLICATION <pub_name_you_entered_above>;
```

Isso criará automaticamente um replication slot no banco de dados de origem e iniciará a replicação dos dados das tabelas especificadas para o banco de dados de destino. Dependendo do volume de dados, esse processo pode levar algum tempo.

No nosso caso, após configurar a assinatura, os dados começaram a fluir:

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/logical_replication/migration-result.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=89c3a5ba9125bc33afb4b104dd65af4b" alt="Resultado da migração após a replicação lógica" size="xl" border width="1920" height="658" data-path="images/managed-postgres/logical_replication/migration-result.png" />

As novas linhas inseridas no banco de dados de origem agora serão replicadas para o banco de dados de destino ClickHouse Managed Postgres quase em tempo real.

<div id="migration-logical-replication-caveats">
  ## Ressalvas e considerações
</div>

* A replicação lógica replica apenas alterações nos dados (INSERT, UPDATE, DELETE). Alterações de esquema (como ALTER TABLE) precisam ser tratadas separadamente.
* Garanta que a conexão de rede entre os bancos de dados de origem e destino seja estável para evitar interrupções na replicação.
* Monitore o atraso da replicação para garantir que o banco de dados de destino esteja acompanhando o de origem. Definir um valor adequado para `max_slot_wal_keep_size` no banco de dados de origem pode ajudar a gerenciar um slot de replicação em crescimento e evitar que ele consuma espaço em disco em excesso.
* Dependendo do seu caso de uso, talvez você queira configurar monitoramento e alertas para o processo de replicação.

<div id="migration-pgdump-pg-restore-next-steps">
  ## Próximas etapas
</div>

Parabéns! Você migrou com sucesso seu banco de dados PostgreSQL para o ClickHouse Managed Postgres usando `pg_dump` e `pg_restore`. Agora, está tudo pronto para explorar os recursos do Managed Postgres e sua integração com o ClickHouse. Aqui está um guia de início rápido de 10 minutos para ajudar você a começar:

* [Guia de início rápido do Managed Postgres](/pt-BR/products/managed-postgres/quickstart)
