> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/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}>
                <span>Beta</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Funcionalidad beta</span>
        </a>;
};

<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 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](/es/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/es/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/es/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/es/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/es/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/es/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/es/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/es/integrations/clickpipes/postgres/source/timescale)
  * [Origen genérico de Postgres](/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](/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](/es/products/managed-postgres/migrations/faq) para ver los errores más comunes y sus soluciones.
</Note>

<div id="step-1-connect">
  ## Paso 1: Conéctate a tu base de datos de origen
</div>

Abre la [consola de ClickHouse Cloud](https://clickhouse.cloud) y selecciona tu servicio de Managed Postgres.

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/servicecard.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=289741405a0299a5867abc1423c56bc3" 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/overview.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=5990542940214be859f2a20c494502b2" 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/startimport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=4716cc9d860f2f0d9522b6ea99e0c0e9" 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/migrationform.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=79dfe4a2ce35b448c0c59e1ff4e97582" 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**.

<div id="automated-schema-migration">
  ## Migración automática del esquema
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/76_4bqp95JvxWs34/images/managed-postgres/pg_dump_restore/automated.webp?fit=max&auto=format&n=76_4bqp95JvxWs34&q=85&s=18e2f35e5eb5012e329be8aed22313c4" alt="Paso 2: Migración automática del esquema con selector de base de datos de destino" size="lg" border width="2632" height="742" data-path="images/managed-postgres/pg_dump_restore/automated.webp" />

Al elegir esta opción, ClickPipe extraerá automáticamente el esquema de la base de datos de origen y lo aplicará a su servicio Managed Postgres durante la [fase de Setup](/es/integrations/clickpipes/postgres/lifecycle#setup) de ClickPipe, después de crearlo.

Esta funcionalidad presupone una **base de datos de destino vacía**, ya que extrae todos los objetos de la base de datos de origen, independientemente de las tablas que seleccione posteriormente en el asistente. Si ya tiene datos en la base de datos de destino o desea una configuración más personalizada, debe elegir el modo [**Manual**](#manual-schema-migration).

Seleccione la base de datos de destino en el menú desplegable o haga clic en **Crear una nueva base de datos** para aprovisionarla.

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/76_4bqp95JvxWs34/images/managed-postgres/pg_dump_restore/newdb.webp?fit=max&auto=format&n=76_4bqp95JvxWs34&q=85&s=2efc6920d5bac8606aa67669e1d81d77" alt="Cuadro de diálogo para crear una nueva base de datos de Postgres" size="lg" border width="1642" height="742" data-path="images/managed-postgres/pg_dump_restore/newdb.webp" />

<div id="monitoring">
  ### Supervisión
</div>

Puede seguir el progreso de la migración de esquema en la vista de detalles de ClickPipes. Los **registros** indicarán el estado de la migración de esquema y también mostrarán los errores que se produzcan.

Este modo tiene las siguientes limitaciones:

* Los pipes que utilizan túneles SSH no pueden usar la migración automática del esquema. El esquema debe [exportarse e importarse manualmente](#manual-schema-migration).

<div id="manual-schema-migration">
  ## Migración manual del esquema
</div>

Si ya tiene datos en la base de datos de destino o desea una configuración más personalizada que la instalación desde cero que requiere el modo automatizado, puede seleccionar aquí el modo **Manual**.

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/76_4bqp95JvxWs34/images/managed-postgres/pg_dump_restore/manual.webp?fit=max&auto=format&n=76_4bqp95JvxWs34&q=85&s=c576b22c0898bcdf971c58091be56a0e" alt="Paso 2: Migración manual del esquema con el comando de exportación 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">
  ### Exporta el esquema de tu base de datos
</div>

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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/nextexport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=24b6cd4f45113a8c2df3404de2b38fb2" 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/psqlexport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=964b2087e1cf5957ff507a4287a90b09" 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**.

<div id="step-3-import-schema">
  ### Importa el esquema en tu servicio de Managed Postgres
</div>

Selecciona la base de datos de destino en el menú desplegable o haz clic en **Crear una nueva base de datos** 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/nextimport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=d49484c6fb84089a91ee7cc7e92b3544" 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/psqlimport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=79ff27ca6baab542a892a954c90f8313" 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**.

<div id="step-4-ingestion-settings">
  ## Paso 4: Configurar los ajustes de ingestión
</div>

Especifique la publicación que se usará para la replicación lógica. Si deja este campo en blanco, se creará una publicación automáticamente.

Expanda **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 paralelos para la carga inicial           | 4              | Número de hilos para la fase de copia masiva                  |
| Tamaño del lote de Pull                         | 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 en paralelo en la instantánea  | 1              | Tablas de las que se toma una instantánea de forma simultánea |

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/advancedsettings.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=694cd7a04e7f0b4328d6d3b27f54928d" alt="Paso 4: formulario de ajustes de ingestión con publicación y opciones avanzadas de replicación" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.webp" />

Haga clic en **Siguiente**.

<div id="step-5-select-tables">
  ## Paso 5: Seleccionar tablas
</div>

Selecciona las tablas que quieres replicar. Las tablas están agrupadas por esquema. Selecciona tablas individuales o expande un esquema para elegirlas todas.

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/tablepicker.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=f115cc6daa9c88ffdbe0bdcc5c49c3d8" alt="Paso 5: selector de tablas agrupadas por esquema con el botón Crear migración" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.webp" />

Haz clic en **Crear migración**.

<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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/migrationlist.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=f48d58085d584d813b98568c3b21f5b8" 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-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/initialload.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=600899644142bb7b4034953845d86565" 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](/es/products/managed-postgres/quickstart)
* [Detalles de conexión de Managed Postgres](/es/products/managed-postgres/connection)
* [Preguntas frecuentes sobre Postgres en ClickPipes](/es/integrations/clickpipes/postgres/faq)
