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

# Migrar a Managed Postgres con ClickHouse Cloud

> Aprende a migrar tu base de datos de PostgreSQL a ClickHouse Managed Postgres con el asistente de importación integrado de orígenes de datos de ClickHouse Cloud.

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>
                Beta feature. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Learn more.
                    </a>
                </u>
            </span>
        </div>;
};

ClickHouse Cloud incluye un asistente de importación integrado que migra tu base de datos externa de PostgreSQL a un servicio de Managed Postgres. El asistente gestiona la conexión de origen, la exportación e importación del esquema, la configuración de replicación y la selección de tablas en cinco pasos guiados.

<div id="prerequisites">
  ## Requisitos previos
</div>

* Acceso a la base de datos PostgreSQL de origen con un usuario que tenga privilegios de replicación.
* Un servicio de ClickHouse Managed Postgres como destino de la migración. Si aún no dispone de uno, consulte la [guía de inicio rápido](/es/products/managed-postgres/quickstart).
* `pg_dump` y `psql` instalados en la máquina 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 las 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.

<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-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/servicecard.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=9489a06a98d75e91348b5da294525e76" 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.png" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/overview.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=9e1cb6b5a839a052819244c60a9ee17d" alt="Entrada de 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.png" />

Haz clic en **Start import**.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/startimport.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=b92bd9233ee8a30016d92213e4d78dd9" 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.png" />

Completa los datos 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 tu base de datos de origen lo requiere.

Si necesitas una conexión privada a tu base de datos de origen, puedes usar **SSH tunneling** y proporcionar 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:

* **Initial load + CDC** — copia los datos existentes y luego mantiene el destino sincronizado con los cambios en curso.
* **Initial load only** — copia única, sin replicación continua.
* **CDC only** — omite la copia inicial y replica solo los cambios nuevos a partir de este momento.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/migrationform.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=ff63743500aeb934937d695cf5354173" 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.png" />

Haz clic en **Next**.

<div id="step-2-export-schema">
  ## Paso 2: Exporta el esquema de tu base de datos
</div>

El asistente muestra un comando `pg_dump` ya completado con los datos de conexión del origen. Ejecútalo en una terminal:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/nextexport.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=0d1901993cfa84d0a6befde992db8f14" alt="Paso 2: comando `pg_dump` para exportar el esquema" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextexport.png" />

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/psqlexport.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=cb98d175bc0c906e051554bf795ed0fc" 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.png" />

Haz clic en **Next**.

<div id="step-3-import-schema">
  ## Paso 3: 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 base de datos nueva** para aprovisionar una.

El asistente muestra un comando `psql` para aplicar el volcado del esquema a tu servicio de Managed Postgres. Ejecútalo en una terminal:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/nextimport.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=49633961f0514ab7c0f1a8f59840faa4" alt="Paso 3: comando psql para importar el esquema" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextimport.png" />

```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-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/psqlimport.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=fb12c7401ae28d74b5e41ef6f5edf672" alt="Salida de la terminal tras ejecutar la importación del esquema con psql" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.png" />

Haz clic en **Siguiente**.

<div id="step-4-ingestion-settings">
  ## Paso 4: Configurar la 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 **Configuración avanzada de replicación** para ajustar el rendimiento:

| Configuración                                   | Predeterminado | Descripción                                                  |
| ----------------------------------------------- | -------------- | ------------------------------------------------------------ |
| Intervalo de sincronización (segundos)          | 10             | Frecuencia con la que se consulta la ranura 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 en paralelo en la instantánea  | 1              | Tablas de las que se toman instantáneas de forma concurrente |

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/advancedsettings.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=1a4ef969ee9e5407ba3552aa71cf9b2a" alt="Paso 4: formulario de configuración de ingestión con opciones de publicación y replicación avanzada" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.png" />

Haga clic en **Siguiente**.

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

Selecciona las tablas que quieres replicar. Las tablas se agrupan por esquema. Selecciona tablas individuales o expande un esquema para seleccionarlas todas.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/tablepicker.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=f5e0d473a2121f18a235d90f044bb245" alt="Paso 5: selector de tablas agrupado por esquema con el botón Crear migración" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.png" />

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

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/migrationlist.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=2a80626d8c0b4790cc19900b6cdc1f67" 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.png" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pgpg/initialload.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=147ea41c4664e2fefd47342eb3cfebbd" alt="Vista detallada 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.png" />

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

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

**Valide los recuentos de filas.** Compruebe 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;
```

**Detenga las escrituras en el origen.** Pause las escrituras de la aplicación. Para habilitar 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 en el origen y en el destino
SELECT MAX(id), MAX(updated_at) FROM public.orders;
```

**Restablezca 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 de Managed Postgres y supervise si se producen errores, violaciones de restricciones y problemas en 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)
* [FAQ de ClickPipes para Postgres](/es/integrations/clickpipes/postgres/faq)
