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

# Migre dados do PostgreSQL usando fontes de dados no ClickPipes

> Aprenda a migrar seu banco de dados PostgreSQL para o ClickHouse Managed Postgres usando ClickPipes.

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

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}>
                <span>Beta</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Recurso beta</span>
        </a>;
};

<BetaBadge link="https://clickhouse.com/cloud/postgres" galaxyTrack={true} galaxyEvent="docs.managed-postgres.migration-guide-clickhouse-cloud-beta" />

O ClickHouse Cloud agora oferece o ClickPipes para migrar seu banco de dados PostgreSQL externo para um serviço Managed Postgres. Essa integração nativa oferece uma experiência simplificada para conectar-se ao banco de dados de origem, exportar o esquema, importá-lo para o Managed Postgres e configurar a replicação contínua.

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

* Acesso ao seu banco de dados PostgreSQL de origem com um usuário que tenha privilégios de replicação. Siga o guia de configuração correspondente à sua origem:
  * [Amazon RDS Postgres](/pt-BR/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/pt-BR/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/pt-BR/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/pt-BR/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/pt-BR/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/pt-BR/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/pt-BR/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/pt-BR/integrations/clickpipes/postgres/source/timescale)
  * [Origem genérica do Postgres](/pt-BR/integrations/clickpipes/postgres/source/generic) para qualquer outro provedor ou instância auto-hospedada
* Um serviço ClickHouse Managed Postgres como destino da migração. Se você ainda não tiver um, consulte o [guia de início rápido](/pt-BR/products/managed-postgres/quickstart).
* `pg_dump` e `psql` instalados na sua máquina local. Ambos vêm com as ferramentas padrão do cliente PostgreSQL.

<div id="considerations">
  ## Considerações antes da migração
</div>

* **Propagação de DDL**: a replicação contínua (CDC) captura operações de DML e `ADD COLUMN`. Outras alterações de DDL, como `DROP COLUMN` e `ALTER COLUMN`, não são propagadas e devem ser aplicadas manualmente no banco de destino.

<Note>
  Se você encontrar problemas durante a migração, consulte o [FAQ de Migrações do Managed Postgres](/pt-BR/products/managed-postgres/migrations/faq) para ver os erros e as soluções mais comuns.
</Note>

<div id="step-1-connect">
  ## Etapa 1: Conecte-se ao seu banco de dados de origem
</div>

Abra o [console do ClickHouse Cloud](https://clickhouse.cloud) e selecione seu serviço Managed Postgres.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/servicecard.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=8aa9dfc8dc17d31bbcdf367a0a057fbe" alt="Cartão do serviço Managed Postgres na lista de serviços do ClickHouse Cloud" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/servicecard.webp" />

Na barra lateral esquerda, clique em **Fontes de dados**.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/overview.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=d24f2ecfb984b55ae7f22c3d9db3650b" alt="Entrada Fontes de dados na barra lateral do serviço Managed Postgres" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/overview.webp" />

Clique em **Iniciar importação**.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/startimport.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=0a79b47f3d28c1db325879b3cd62bfbc" alt="Página Fontes de dados com o botão Iniciar importação" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/startimport.webp" />

Preencha os detalhes da conexão com seu banco de dados PostgreSQL de origem: host, porta, nome de usuário, senha e nome do banco de dados. Ative **TLS** se a origem exigir.

Se você precisar de uma conexão privada com seu banco de dados de origem, poderá optar por **tunelamento SSH** e fornecer os detalhes de SSH necessários. Isso permite que a migração se conecte com segurança a bancos de dados que não estão acessíveis publicamente.

Escolha um método de ingestão:

* **Carga inicial + CDC** — copia os dados existentes e depois mantém o destino sincronizado com as alterações em andamento.
* **Somente carga inicial** — cópia única, sem replicação contínua.
* **Somente CDC** — pula a cópia inicial e replica apenas as novas alterações a partir deste ponto.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/migrationform.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=ddc5d00d2407803ff684230f538bb02f" alt="Etapa 1: formulário de conexão com o banco de dados de origem com opções de método de ingestão" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationform.webp" />

Clique em **Próximo**.

<div id="automated-schema-migration">
  ## Migração automatizada de esquema
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pg_dump_restore/automated.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=17604c27022a79fe939622d3bcc774d5" alt="Etapa 2: migração automatizada de esquema com seletor de banco de dados de destino" size="lg" border width="2632" height="742" data-path="images/managed-postgres/pg_dump_restore/automated.webp" />

Ao escolher essa opção, o ClickPipe extrairá automaticamente o esquema do seu banco de dados de origem e o aplicará ao serviço Managed Postgres durante a [fase de Setup](/pt-BR/integrations/clickpipes/postgres/lifecycle#setup) do ClickPipe, após sua criação.

Esse recurso pressupõe um **banco de dados de destino vazio**, pois extrai todos os objetos do banco de dados de origem, independentemente das tabelas que você selecionar posteriormente no assistente. Se já houver dados no banco de dados de destino ou se você quiser uma configuração mais personalizada, deverá optar pelo modo [**Manual**](#manual-schema-migration).

Selecione o banco de dados de destino no menu suspenso ou clique em **Criar um novo banco de dados** para provisionar um.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pg_dump_restore/newdb.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=c602e0d3facaa69aafc59b7feb829518" alt="Caixa de diálogo para criar um novo banco de dados Postgres" size="lg" border width="1642" height="742" data-path="images/managed-postgres/pg_dump_restore/newdb.webp" />

<div id="monitoring">
  ### Monitoramento
</div>

Você pode acompanhar o andamento da migração de esquema na visualização de detalhes do ClickPipes. Os **Logs** indicarão o status da migração de esquema, e quaisquer erros encontrados também serão exibidos ali.

Este modo tem as seguintes limitações:

* Pipes que usam tunelamento SSH não podem usar a migração automatizada de esquema. O esquema deve ser [exportado e importado manualmente](#manual-schema-migration).

<div id="manual-schema-migration">
  ## Migração manual de esquema
</div>

Caso você já tenha dados no banco de dados de destino ou queira uma configuração mais personalizada, em vez do ambiente limpo exigido pelo modo automatizado, selecione o modo **Manual**.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pg_dump_restore/manual.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=f32a0e97ce5fd443f161ca5fbd7a96c1" alt="Passo 2: Migração manual de esquema com o comando de exportação pg_dump" size="lg" border width="2632" height="1022" data-path="images/managed-postgres/pg_dump_restore/manual.webp" />

<div id="step-2-export-schema">
  ### Exporte o esquema do seu banco de dados
</div>

O assistente exibe um comando `pg_dump` preenchido previamente com os detalhes da conexão de origem. Execute-o em um terminal:

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/nextexport.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=bce4aa98938d533fdf987f30eea347e3" alt="Etapa 2: comando pg_dump para exportação do esquema" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextexport.webp" />

```shell theme={null}
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql
```

Isso cria `pg.sql` no diretório atual.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/psqlexport.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=212fda56d83f3317739e0324c62405f8" alt="Saída do terminal após executar pg_dump" size="lg" border width="1452" height="422" data-path="images/managed-postgres/pgpg/psqlexport.webp" />

Clique em **Próximo**.

<div id="step-3-import-schema">
  ### Importe o esquema para seu serviço Managed Postgres
</div>

Selecione o banco de dados de destino na lista suspensa ou clique em **Criar um novo banco de dados** para provisionar um.

O assistente exibe um comando `psql` para aplicar o dump do esquema ao seu serviço Managed Postgres. Execute-o em um terminal:

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/nextimport.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=3168bc72b494667100fa479895db5b34" alt="Etapa 3: comando psql para importação do esquema" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextimport.webp" />

```shell theme={null}
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
```

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/psqlimport.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=bd113b9c4b484d040815d0895b875533" alt="Saída do terminal após executar a importação do esquema com psql" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.webp" />

Clique em **Próximo**.

<div id="step-4-ingestion-settings">
  ## Etapa 4: Definir as configurações de ingestão
</div>

Especifique a publication a ser usada para a replicação lógica. Se você deixar esse campo em branco, uma publication será criada automaticamente.

Expanda **Configurações avançadas de replicação** para ajustar a taxa de transferência:

| Configuração                              | Padrão  | Descrição                                             |
| ----------------------------------------- | ------- | ----------------------------------------------------- |
| Intervalo de sincronização (segundos)     | 10      | Com que frequência o slot de replicação é consultado  |
| Threads paralelas para carga inicial      | 4       | Número de threads para a fase de cópia em massa       |
| Tamanho do lote de extração               | 100,000 | Linhas obtidas por lote de replicação                 |
| Número de linhas por partição no snapshot | 100000  | Tamanho da partição para snapshots de tabelas grandes |
| Número de tabelas em paralelo no snapshot | 1       | Tabelas capturadas em snapshot simultaneamente        |

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/advancedsettings.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=8658593a3cad8d0181c9ce1d70d0645c" alt="Etapa 4: formulário de configurações de ingestão com publication e opções avançadas de replicação" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.webp" />

Clique em **Próximo**.

<div id="step-5-select-tables">
  ## Etapa 5: Selecione as tabelas
</div>

Selecione as tabelas que você quer replicar. As tabelas são agrupadas por esquema. Selecione tabelas individuais ou expanda um esquema para selecionar todas.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/tablepicker.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=9c493eba90c2a1d5c8f7c1e063810422" alt="Etapa 5: seletor de tabelas agrupadas por esquema com o botão Criar migração" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.webp" />

Clique em **Criar migração**.

<div id="monitor">
  ## Monitore a migração
</div>

Após criar a migração, ela aparecerá listada em **Fontes de dados** com o status **Em execução**.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/migrationlist.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=3dc8106c5867d1d0986697e051a38aab" alt="Lista de fontes de dados mostrando uma migração em execução" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationlist.webp" />

Clique na migração para abrir a tela de detalhes. A aba **Tabelas** mostra o progresso da carga inicial de cada tabela, incluindo linhas processadas, partições e o tempo médio por partição. A aba **Métricas** mostra a defasagem da replicação e a taxa de transferência quando o CDC começar.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/xUD5t8rQeJvNiIFp/images/managed-postgres/pgpg/initialload.webp?fit=max&auto=format&n=xUD5t8rQeJvNiIFp&q=85&s=4c7b5085a5e42f8b51cc2ec7fd795c87" alt="Tela de detalhes da migração mostrando estatísticas da carga inicial por tabela" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/initialload.webp" />

<div id="post-migration">
  ## Tarefas pós-migração
</div>

Quando a carga inicial for concluída e, se estiver usando CDC, a defasagem da replicação estiver próxima de zero:

**Valide a contagem de linhas.** Faça uma verificação pontual das tabelas críticas na origem e no destino antes de redirecionar o tráfego:

```sql theme={null}
SELECT COUNT(*) FROM public.orders;
```

**Interrompa as escritas na origem.** Pause as escritas da aplicação. Para impor o modo somente leitura durante a transição:

```sql theme={null}
ALTER DATABASE <source_db> SET default_transaction_read_only = on;
```

**Confirme se a replicação está sincronizada.** Compare a linha mais recente na origem e no destino:

```sql theme={null}
-- Execute na origem e no destino
SELECT MAX(id), MAX(updated_at) FROM public.orders;
```

**Redefina as sequências.** Alinhe-as aos valores máximos atuais de cada tabela:

```sql theme={null}
DO $$
DECLARE r RECORD;
BEGIN
    FOR r IN
        SELECT
            n.nspname AS schema_name,
            c.relname AS table_name,
            a.attname AS column_name,
            pg_get_serial_sequence(format('%I.%I', n.nspname, c.relname), a.attname) AS seq_name
        FROM pg_class c
        JOIN pg_namespace n ON n.oid = c.relnamespace
        JOIN pg_attribute a ON a.attrelid = c.oid
        WHERE c.relkind = 'r'
            AND a.attnum > 0
            AND NOT a.attisdropped
            AND n.nspname NOT IN ('pg_catalog', 'information_schema')
    LOOP
        IF r.seq_name IS NOT NULL THEN
            EXECUTE format(
                'SELECT setval(%L, COALESCE((SELECT MAX(%I) FROM %I.%I), 0) + 1, false)',
                r.seq_name, r.column_name, r.schema_name, r.table_name
            );
        END IF;
    END LOOP;
END $$;
```

**Redirecione o tráfego da aplicação.** Aponte leituras e gravações para seu serviço Managed Postgres e monitore erros, violações de restrições e a integridade da replicação.

**Faça a limpeza.**  Depois de redirecionar o tráfego e confirmar que o novo serviço está funcionando corretamente, exclua a migração em **fonte de dados**. Se você usou CDC, exclua o slot de replicação da origem para liberar recursos:

```sql theme={null}
SELECT pg_drop_replication_slot('<slot_name>');
```

<div id="next-steps">
  ## Próximos passos
</div>

* [Guia de início rápido do Managed Postgres](/pt-BR/products/managed-postgres/quickstart)
* [Detalhes de conexão do Managed Postgres](/pt-BR/products/managed-postgres/connection)
* [FAQ do ClickPipes Postgres](/pt-BR/integrations/clickpipes/postgres/faq)
