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

# Migrer des données PostgreSQL avec des sources de données dans ClickPipes

> Découvrez comment migrer votre base de données PostgreSQL vers ClickHouse Managed Postgres avec 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>Fonctionnalité en bêta</span>
        </a>;
};

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

ClickHouse Cloud propose désormais ClickPipes pour migrer votre base de données PostgreSQL externe vers un service Managed Postgres. Cette intégration native offre une expérience simplifiée pour se connecter à votre base de données source, exporter le schéma, l’importer dans Managed Postgres et configurer la réplication continue.

<div id="prerequisites">
  ## Prérequis
</div>

* Accès à votre base de données PostgreSQL source via un utilisateur disposant des privilèges de réplication. Suivez le guide de configuration correspondant à votre source :
  * [Amazon RDS Postgres](/fr/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/fr/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/fr/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/fr/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/fr/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/fr/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/fr/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/fr/integrations/clickpipes/postgres/source/timescale)
  * [Source Postgres générique](/fr/integrations/clickpipes/postgres/source/generic) pour tout autre fournisseur ou instance auto-hébergée
* Un service ClickHouse Managed Postgres comme cible de migration. Si vous n’en avez pas encore, consultez le [quickstart](/fr/products/managed-postgres/quickstart).
* `pg_dump` et `psql` installés sur votre machine locale. Tous deux sont fournis avec les outils client PostgreSQL standard.

<div id="considerations">
  ## Points à prendre en compte avant la migration
</div>

* **Propagation du DDL** : la réplication continue (CDC) capture les opérations DML et `ADD COLUMN`. Les autres modifications DDL, telles que `DROP COLUMN` et `ALTER COLUMN`, ne sont pas propagées et doivent être appliquées manuellement sur la base cible.

<Note>
  Si vous rencontrez des problèmes pendant la migration, consultez la [FAQ des migrations Managed Postgres](/fr/products/managed-postgres/migrations/faq) pour connaître les erreurs courantes et leurs solutions.
</Note>

<div id="step-1-connect">
  ## Étape 1 : Connectez-vous à votre base de données source
</div>

Ouvrez la [console ClickHouse Cloud](https://clickhouse.cloud) et sélectionnez votre service 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="Carte du service Managed Postgres dans la liste des services ClickHouse Cloud" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/servicecard.webp" />

Dans la barre latérale de gauche, cliquez sur **Sources de données**.

<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="Entrée Sources de données dans la barre latérale du service Managed Postgres" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/overview.webp" />

Cliquez sur **Démarrer l'importation**.

<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="Page Sources de données avec le bouton Démarrer l'importation" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/startimport.webp" />

Renseignez les informations de connexion de votre base de données PostgreSQL source : hôte, port, nom d'utilisateur, mot de passe et nom de la base de données. Activez **TLS** si votre source l'exige.

Si vous avez besoin d'une connexion privée à votre base de données source, vous pouvez opter pour un **tunnel SSH** et fournir les informations SSH nécessaires. Cela permet à la migration de se connecter en toute sécurité à des bases de données qui ne sont pas accessibles publiquement.

Choisissez une méthode d'ingestion :

* **Chargement initial + CDC** — copie les données existantes, puis maintient la cible synchronisée avec les modifications en cours.
* **Chargement initial uniquement** — copie unique, sans réplication continue.
* **CDC uniquement** — ignore la copie initiale et réplique uniquement les nouvelles modifications à partir de ce moment.

<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="Étape 1 : formulaire de connexion à la base de données source avec options de méthode d'ingestion" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationform.webp" />

Cliquez sur **Suivant**.

<div id="automated-schema-migration">
  ## Migration automatisée du schéma
</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="Étape 2 : migration automatisée du schéma avec sélecteur de base de données de destination" size="lg" border width="2632" height="742" data-path="images/managed-postgres/pg_dump_restore/automated.webp" />

Si vous choisissez cette option, le ClickPipe récupère automatiquement le schéma de votre base de données source et l'applique à votre service Managed Postgres lors de la [phase Setup](/fr/integrations/clickpipes/postgres/lifecycle#setup) du ClickPipe, après sa création.

Cette fonctionnalité suppose une **base de données cible vide**, car elle récupère tous les objets de la base de données source, quelles que soient les tables que vous sélectionnerez ensuite dans l'assistant. Si votre base de données cible contient déjà des données ou si vous souhaitez une configuration plus personnalisée, vous devez choisir le mode [**Manuel**](#manual-schema-migration).

Sélectionnez la base de données de destination dans la liste déroulante ou cliquez sur **Créer une nouvelle base de données** pour en provisionner une.

<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="Boîte de dialogue Créer une base de données Postgres" size="lg" border width="1642" height="742" data-path="images/managed-postgres/pg_dump_restore/newdb.webp" />

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

Vous pouvez suivre l’avancement de la migration de schéma dans la vue détaillée de ClickPipes. Les **journaux** indiquent l’état de la migration de schéma et affichent également les éventuelles erreurs rencontrées.

Ce mode présente les limitations suivantes :

* Les pipes utilisant le tunnel SSH ne peuvent pas recourir à la migration automatisée du schéma. Le schéma doit être [exporté et importé manuellement](#manual-schema-migration).

<div id="manual-schema-migration">
  ## Migration manuelle du schéma
</div>

Si votre base de données cible contient déjà des données ou si vous souhaitez une configuration plus personnalisée que l’environnement vierge attendu par le mode automatisé, vous pouvez sélectionner le mode **Manuel**.

<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="Étape 2 : migration manuelle du schéma avec la commande d’exportation 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">
  ### Exportez le schéma de votre base de données
</div>

L'assistant affiche une commande `pg_dump` préremplie avec les informations de connexion de votre source. Exécutez-la dans un 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="Étape 2 : commande pg_dump pour l'export du schéma" 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
```

Cela crée `pg.sql` dans votre répertoire courant.

<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="Sortie du terminal après l'exécution de pg_dump" size="lg" border width="1452" height="422" data-path="images/managed-postgres/pgpg/psqlexport.webp" />

Cliquez sur **Suivant**.

<div id="step-3-import-schema">
  ### Importez le schéma dans votre service Managed Postgres
</div>

Sélectionnez la base de données de destination dans la liste déroulante, ou cliquez sur **Créer une nouvelle base de données** pour en provisionner une.

L'assistant affiche une commande `psql` pour appliquer le dump du schéma à votre service Managed Postgres. Exécutez-la dans un 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="Étape 3 : commande psql pour l'import du schéma" 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="Sortie du terminal après l'exécution de l'import du schéma avec psql" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.webp" />

Cliquez sur **Suivant**.

<div id="step-4-ingestion-settings">
  ## Étape 4 : Configurer les paramètres d’ingestion
</div>

Indiquez la publication à utiliser pour la réplication logique. Si vous laissez ce champ vide, une publication sera créée automatiquement.

Développez **Paramètres avancés de réplication** pour ajuster le débit :

| Paramètre                                      | Par défaut | Description                                                |
| ---------------------------------------------- | ---------- | ---------------------------------------------------------- |
| Intervalle de synchronisation (secondes)       | 10         | Fréquence d’interrogation du slot de réplication           |
| Threads parallèles pour le chargement initial  | 4          | Nombre de threads pour la phase de copie en bloc           |
| Taille du lot d’extraction                     | 100,000    | Lignes récupérées par lot de réplication                   |
| Nombre de lignes de l’instantané par partition | 100000     | Taille de partition pour les instantanés de grandes tables |
| Nombre de tables de l’instantané en parallèle  | 1          | Tables dont l’instantané est pris simultanément            |

<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="Étape 4 : formulaire des paramètres d’ingestion avec publication et options avancées de réplication" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.webp" />

Cliquez sur **Next**.

<div id="step-5-select-tables">
  ## Étape 5: Sélectionner les tables
</div>

Sélectionnez les tables que vous souhaitez répliquer. Les tables sont regroupées par schéma. Sélectionnez des tables individuellement ou développez un schéma pour toutes les sélectionner.

<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="Étape 5 : sélecteur de tables regroupées par schéma avec le bouton Créer la migration" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.webp" />

Cliquez sur **Créer la migration**.

<div id="monitor">
  ## Surveiller la migration
</div>

Après avoir créé la migration, elle apparaît dans **Sources de données** avec le statut **En cours d’exécution**.

<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="Liste des sources de données affichant une migration en cours d’exécution" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationlist.webp" />

Cliquez sur la migration pour ouvrir la vue détaillée. L’onglet **Tables** affiche la progression du chargement initial pour chaque table, notamment le nombre de lignes traitées, les partitions et le temps moyen par partition. L’onglet **Metrics** affiche le retard de réplication et le débit une fois le CDC démarré.

<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="Vue détaillée de la migration affichant les statistiques du chargement initial par table" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/initialload.webp" />

<div id="post-migration">
  ## Tâches post-migration
</div>

Une fois le chargement initial terminé et, si vous utilisez CDC, que la latence de réplication est proche de zéro :

**Validez le nombre de lignes.** Effectuez des vérifications ponctuelles des tables critiques sur la source et sur la cible avant de basculer le trafic :

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

**Interrompez les écritures sur la source.** Suspendez les écritures de l’application. Pour appliquer le mode `read-only` pendant le basculement :

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

**Vérifiez que la réplication est bien à jour.** Comparez la dernière ligne de la source et de la cible :

```sql theme={null}
-- Run on both source and target
SELECT MAX(id), MAX(updated_at) FROM public.orders;
```

**Réinitialisez les séquences.** Alignez les séquences sur la valeur maximale actuelle de chaque table :

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

**Basculez le trafic de l’application.** Redirigez les lectures et les écritures vers votre service Managed Postgres et surveillez les erreurs, les violations de contraintes et le bon fonctionnement de la réplication.

**Nettoyez.**  Une fois la bascule effectuée et après avoir confirmé que le nouveau service fonctionne correctement, supprimez la migration depuis **Sources de données**. Si vous avez utilisé CDC, supprimez le slot de réplication sur la source afin de libérer des ressources :

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

<div id="next-steps">
  ## Étapes suivantes
</div>

* [Guide de démarrage rapide pour Managed Postgres](/fr/products/managed-postgres/quickstart)
* [Informations de connexion à Managed Postgres](/fr/products/managed-postgres/connection)
* [FAQ ClickPipes pour Postgres](/fr/integrations/clickpipes/postgres/faq)
