> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/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}>
                <Icon />
                <span>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Funcionalidade Beta. 
                <u>
                    <a href="/docs/docs/beta-and-experimental-features#beta-features">
                        Saiba mais.
                    </a>
                </u>
            </span>
        </div>;
};

<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](/docs/pt-BR/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/docs/pt-BR/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/docs/pt-BR/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/docs/pt-BR/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/docs/pt-BR/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/docs/pt-BR/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/docs/pt-BR/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/docs/pt-BR/integrations/clickpipes/postgres/source/timescale)
  * [Origem genérica do Postgres](/docs/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](/docs/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](/docs/pt-BR/products/managed-postgres/migrations/faq) para ver os erros e as soluções mais comuns.
</Note>

<Steps>
  <Step title="Conecte-se ao seu banco de dados de origem" id="step-1-connect">
    Abra o [console do ClickHouse Cloud](https://clickhouse.cloud) e selecione seu serviço Managed Postgres.

    <Image img="https://mintcdn.com/private-7c7dfe99/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/servicecard.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=9b98290197063c76fdacc9ac06749bea" 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/overview.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=f22839ab1704fb125a6b0e6efb871934" 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/startimport.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=e65b851af7a659ca5c994c540d337833" 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/migrationform.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=4e668ee6f701c07181d5efc2148f9d68" 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**.
  </Step>

  <Step title="Exporte o esquema do seu banco de dados" id="step-2-export-schema">
    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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/nextexport.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=3b134690c48bbd56aaa7e186348b7f61" 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/psqlexport.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=a3a03aa81fbb7bf54e26c06d1f34a54a" 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**.
  </Step>

  <Step title="Importe o esquema para seu serviço Managed Postgres" id="step-3-import-schema">
    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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/nextimport.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=987b248bd1bef286ce2e2f44ecddacf7" 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/psqlimport.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=21488b23372606d9a878773443840952" 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**.
  </Step>

  <Step title="Configure as definições de ingestão" id="step-4-ingestion-settings">
    Especifique a publication a ser usada na 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      | Frequência com que o replication slot é consultado    |
    | Threads paralelas para carga inicial      | 4       | Número de threads para a fase de cópia em massa       |
    | Pull batch size                           | 100,000 | Linhas buscadas por batch de replicação               |
    | Número de linhas do snapshot por partição | 100000  | Tamanho da partição para snapshots de tabelas grandes |
    | Número de tabelas do snapshot em paralelo | 1       | Tabelas das quais é feito snapshot simultaneamente    |

    <Image img="https://mintcdn.com/private-7c7dfe99/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/advancedsettings.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=aaa8c65ce3951d743cda7b512b4f37d9" 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**.
  </Step>

  <Step title="Selecione as tabelas" id="step-5-select-tables">
    Selecione as tabelas que você deseja 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/tablepicker.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=445729d818e3d464f58257282116d7f7" alt="Etapa 5: seletor de tabelas agrupado por esquema com 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**.
  </Step>
</Steps>

<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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/migrationlist.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=d4c7643df720b32f247ade727c8559ed" 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/-DTs8Nf-Dydrn3iN/images/managed-postgres/pgpg/initialload.webp?fit=max&auto=format&n=-DTs8Nf-Dydrn3iN&q=85&s=2b1fc16a14dccd3685665b0119a4bf41" 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](/docs/pt-BR/products/managed-postgres/quickstart)
* [Detalhes de conexão do Managed Postgres](/docs/pt-BR/products/managed-postgres/connection)
* [FAQ do ClickPipes Postgres](/docs/pt-BR/integrations/clickpipes/postgres/faq)
