> ## 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.

# Migrar datos de PostgreSQL mediante las fuentes de datos de ClickPipes

> Aprende a migrar tu base de datos PostgreSQL a ClickHouse Managed Postgres con 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>
                Funcionalidad beta. 
                <u>
                    <a href="/docs/docs/beta-and-experimental-features#beta-features">
                        Más información.
                    </a>
                </u>
            </span>
        </div>;
};

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

ClickHouse Cloud ahora ofrece ClickPipes para migrar su base de datos externa de PostgreSQL a un servicio de Managed Postgres. Esta integración incorporada ofrece una experiencia optimizada para conectarse a su base de datos de origen, exportar el esquema, importarlo en Managed Postgres y configurar la replicación continua.

<div id="prerequisites">
  ## Prerrequisitos
</div>

* Acceso a tu base de datos PostgreSQL de origen con un usuario que tenga privilegios de replicación. Sigue la guía de configuración correspondiente a tu origen:
  * [Amazon RDS Postgres](/docs/es/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/docs/es/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/docs/es/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/docs/es/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/docs/es/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/docs/es/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/docs/es/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/docs/es/integrations/clickpipes/postgres/source/timescale)
  * [Origen genérico de Postgres](/docs/es/integrations/clickpipes/postgres/source/generic) para cualquier otro proveedor o instancia autohospedada
* Un servicio ClickHouse Managed Postgres como destino de la migration. Si aún no tienes uno, consulta el [quickstart](/docs/es/products/managed-postgres/quickstart).
* `pg_dump` y `psql` instalados en tu equipo local. Ambos se incluyen con las herramientas estándar del cliente de PostgreSQL.

<div id="considerations">
  ## Consideraciones antes de migrar
</div>

* **Propagación de DDL**: la replicación continua (CDC) captura operaciones DML y `ADD COLUMN`. Otros cambios de DDL, como `DROP COLUMN` y `ALTER COLUMN`, no se propagan y deben aplicarse manualmente en el sistema de destino.

<Note>
  Si tienes problemas durante la migración, consulta las [preguntas frecuentes sobre migraciones de Managed Postgres](/docs/es/products/managed-postgres/migrations/faq) para ver los errores más comunes y sus soluciones.
</Note>

<Steps>
  <Step title="Conéctate a tu base de datos de origen" id="step-1-connect">
    Abre la [consola de ClickHouse Cloud](https://clickhouse.cloud) y selecciona tu servicio de 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="Tarjeta del servicio de Managed Postgres en la lista de servicios de ClickHouse Cloud" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/servicecard.webp" />

    En la barra lateral izquierda, haz clic en **fuentes de datos**.

    <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 fuentes de datos en la barra lateral del servicio de Managed Postgres" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/overview.webp" />

    Haz clic en **Start import**.

    <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 de fuentes de datos con el botón Start import" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/startimport.webp" />

    Completa los detalles de conexión de tu base de datos PostgreSQL de origen: host, puerto, nombre de usuario, contraseña y nombre de la base de datos. Habilita **TLS** si la base de datos de origen lo requiere.

    Si necesitas una conexión privada a tu base de datos de origen, puedes usar un **túnel SSH** e introducir los datos de SSH necesarios. Esto permite que la migración se conecte de forma segura a bases de datos que no son accesibles públicamente.

    Elige un método de ingestión:

    * **Carga inicial + CDC** — copia los datos existentes y después mantiene el destino sincronizado con los cambios posteriores.
    * **Solo carga inicial** — copia puntual, sin replicación continua.
    * **Solo CDC** — omite la copia inicial y replica únicamente los cambios nuevos a partir de este momento.

    <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="Paso 1: formulario de conexión a la base de datos de origen con opciones de método de ingestión" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationform.webp" />

    Haz clic en **Next**.
  </Step>

  <Step title="Exporta el esquema de tu base de datos" id="step-2-export-schema">
    El asistente muestra un comando `pg_dump` ya rellenado con los detalles de conexión de tu origen. Ejecútalo en una 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="Paso 2: comando pg_dump para exportar el 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
    ```

    Esto crea `pg.sql` en tu directorio actual.

    <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="Salida de la terminal después de ejecutar pg_dump" size="lg" border width="1452" height="422" data-path="images/managed-postgres/pgpg/psqlexport.webp" />

    Haz clic en **Next**.
  </Step>

  <Step title="Importa el esquema en tu servicio de Managed Postgres" id="step-3-import-schema">
    Selecciona la base de datos de destino en el menú desplegable o haz clic en **Create a new database** para aprovisionar una.

    El asistente muestra un comando `psql` para aplicar el volcado de esquema a tu servicio de Managed Postgres. Ejecútalo en una 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="Paso 3: comando psql para importar el 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="Salida de la terminal después de ejecutar la importación del esquema con psql" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.webp" />

    Haz clic en **Next**.
  </Step>

  <Step title="Configura los ajustes de ingestión" id="step-4-ingestion-settings">
    Especifica la publication que se usará para la replicación lógica. Si dejas este campo en blanco, se creará una publication automáticamente.

    Expande **Advanced replication settings** para ajustar el rendimiento:

    | Ajuste                                          | Predeterminado | Descripción                                                      |
    | ----------------------------------------------- | -------------- | ---------------------------------------------------------------- |
    | Intervalo de sincronización (segundos)          | 10             | Frecuencia con la que se consulta el slot de replicación         |
    | Hilos en paralelo para la carga inicial         | 4              | Número de hilos para la fase de copia masiva                     |
    | Tamaño del lote de extracción                   | 100,000        | Filas recuperadas por lote de replicación                        |
    | Número de filas por partición en la instantánea | 100000         | Tamaño de la partición para instantáneas de tablas grandes       |
    | Número de tablas de la instantánea en paralelo  | 1              | Tablas para las que se toma una instantánea de forma concurrente |

    <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="Paso 4: formulario de ajustes de ingestión con publication y opciones avanzadas de replicación" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.webp" />

    Haz clic en **Next**.
  </Step>

  <Step title="Selecciona tablas" id="step-5-select-tables">
    Selecciona las tablas que quieres replicar. Las tablas se agrupan por esquema. Selecciona tablas individuales o expande un esquema para elegirlas 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="Paso 5: selector de tablas agrupadas por esquema con el botón Create migration" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.webp" />

    Haz clic en **Create migration**.
  </Step>
</Steps>

<div id="monitor">
  ## Supervisa la migración
</div>

Después de crear la migración, la verás en **Fuentes de datos** con el estado **En ejecución**.

<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 fuentes de datos que muestra una migración en ejecución" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationlist.webp" />

Haz clic en la migración para abrir la vista de detalles. La pestaña **Tablas** muestra el progreso de la carga inicial de cada tabla, incluidas las filas procesadas, las particiones y el tiempo medio por partición. La pestaña **Métricas** muestra el retraso de replicación y el rendimiento una vez que se inicia CDC.

<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="Vista de detalles de la migración que muestra estadísticas de la carga inicial por tabla" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/initialload.webp" />

<div id="post-migration">
  ## Tareas posteriores a la migración
</div>

Una vez completada la carga inicial y, si se usa CDC, cuando el retraso de replicación sea casi nulo:

**Valide el número de filas.** Verifique de forma puntual las tablas críticas tanto en el origen como en el destino antes de redirigir el tráfico:

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

**Detén las escrituras en el origen.** Pausa las operaciones de escritura de la aplicación. Para forzar el modo de solo lectura durante la transición:

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

**Confirme que la replicación esté al día.** Compare la última fila del origen y del destino:

```sql theme={null}
-- Ejecutar tanto en el origen como en el destino
SELECT MAX(id), MAX(updated_at) FROM public.orders;
```

**Restablecer las secuencias.** Alinee las secuencias con los valores máximos actuales de cada tabla:

```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 $$;
```

**Redirija el tráfico de la aplicación.** Dirija las operaciones de lectura y escritura a su servicio Managed Postgres y supervise los errores, las violaciones de restricciones y el estado de la replicación.

**Limpieza.**  Una vez que haya redirigido el tráfico y confirmado que el nuevo servicio está en buen estado, elimine la migración de **fuentes de datos**. Si usó CDC, elimine el slot de replicación del origen para liberar recursos:

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

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

* [Guía de inicio rápido de Managed Postgres](/docs/es/products/managed-postgres/quickstart)
* [Detalles de conexión de Managed Postgres](/docs/es/products/managed-postgres/connection)
* [Preguntas frecuentes sobre Postgres en ClickPipes](/docs/es/integrations/clickpipes/postgres/faq)
