> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.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", background}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  const backgroundColor = background === "white" ? "white" : background === "black" ? "rgb(31 31 28)" : undefined;
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} style={{
    backgroundColor
  }} />
      </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>

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

Ouvrez la [console ClickHouse Cloud](https://clickhouse.cloud) et sélectionnez votre service Managed Postgres.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/servicecard.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=5da06beedac095dc527e7a83460f863e" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/overview.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=0fffed584827f3fb1386d27fc205b81a" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/startimport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=4b335dc3b56a6bfa1a9ca04dc9447e56" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/migrationform.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=f360daf02b6b04240a0d9e9e7f143498" 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**.

<h2 id="automated-schema-migration">
  Migration automatisée du schéma
</h2>

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pg_dump_restore/automated.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=9951eb0470ed0a63c40543b2285057b9" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pg_dump_restore/newdb.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=7af9cb67d83ba390fa0dfbe9a26da87d" 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" />

<h3 id="monitoring">
  Monitoring
</h3>

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

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

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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pg_dump_restore/manual.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=bcb9482e3070bd505e42dd20b49949e5" 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" />

<h3 id="step-2-export-schema">
  Exportez le schéma de votre base de données
</h3>

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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/nextexport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=817489659403b6183ea9ca726b4c1c85" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/psqlexport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=8cb54def65d2d7d581686c4339aa0df2" 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**.

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

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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/nextimport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=59f3694d70eca58c60c9cb2f64509cd0" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/psqlimport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=3b4d6f4d7502e549ff3db7aa2e7b9c4a" 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**.

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

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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/advancedsettings.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=b6c4dcaefdf8176f3d61636fabe70b95" 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**.

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

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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/tablepicker.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=275772f47c4cbb55fdac96acdf8a8735" 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**.

<h2 id="monitor">
  Surveiller la migration
</h2>

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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/migrationlist.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=a8e8712ecd01d1bf7b6112ba26275965" 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-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/initialload.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=8efa910d3f00341a552b81aca49b9c05" 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" />

<h2 id="cutover">
  Basculer le trafic
</h2>

Une fois le chargement initial terminé et, si vous utilisez le CDC, dès que le retard de réplication est proche de zéro, vous pouvez basculer le trafic de votre base de données Postgres source vers votre service Managed Postgres. Ouvrez la vue détaillée de la migration et sélectionnez l'onglet **Post-migration steps**. Cet assistant vous guide à travers les six étapes nécessaires pour finaliser la migration en toute sécurité. Chaque étape doit être réalisée dans l'ordre avant de pouvoir passer à la suivante.

<h3 id="cutover-read-only">
  Étape 1 : passer la base de données Postgres source en mode lecture seule
</h3>

Arrêtez les écritures applicatives sur la source afin d'éviter toute divergence pendant le basculement. L'assistant affiche une commande `ALTER DATABASE` pré-remplie avec le nom de votre base de données source — exécutez-la sur celle-ci :

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

Terminez ensuite toutes les connexions existantes afin qu'elles prennent en compte le paramètre read-only et qu'aucune écriture in-flight ne subsiste :

```sql theme={null}
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = '<source_db>'
  AND pid <> pg_backend_pid();
```

<Note>
  Selon votre provider Postgres, cette étape peut différer. Les services managés peuvent restreindre `ALTER DATABASE` ou l'arrêt des backends, et exposer à la place le mode lecture seule via leur propre console, des parameter groups, ou par la révocation des privileges d'écriture. Consultez la documentation de votre provider pour connaître la méthode équivalente permettant de passer la source en read-only.
</Note>

Cliquez sur **Mark as completed** pour continuer.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/readonly.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=b5e1558c444dbf18d4a85850a9e2fe4d" alt="Étape 1 post-migration : passer la source database en mode lecture seule" size="lg" border width="1486" height="1818" data-path="images/managed-postgres/pgpg/post-migration/readonly.webp" />

<h3 id="cutover-validate">
  Étape 2 : valider le nombre de lignes
</h3>

Sélectionnez les tables répliquées que vous souhaitez valider. ClickPipes compte les lignes de chaque table sélectionnée, à la fois sur la source et sur la cible, puis compare les résultats. Les tables volumineuses peuvent renvoyer des décomptes approximatifs. Utilisez **Select all tables** pour valider toutes les tables, ou recherchez des tables spécifiques et activez-les, puis cliquez sur **Count rows**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/GFspt4gULfSkoH59/images/managed-postgres/pgpg/post-migration/validate-row-counts.webp?fit=max&auto=format&n=GFspt4gULfSkoH59&q=85&s=2a376bdc0028485f26c4e3f159b7fec4" alt="Étape 2 post-migration : sélectionner les tables et valider le nombre de lignes entre la source et la cible" size="lg" border width="1452" height="1612" data-path="images/managed-postgres/pgpg/post-migration/validate-row-counts.webp" />

<h3 id="cutover-pause">
  Étape 3 : mettre le pipe en pause
</h3>

Mettez le ClickPipe en pause afin d'arrêter la réplication avant de réinitialiser les séquences et de basculer le trafic. Cliquez sur **Pause ClickPipe** et attendez que le pipe soit effectivement en pause avant de poursuivre.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/pause-pipe.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=6d650c0e80230dd2fec9d6cce10d79de" alt="Étape 3 post-migration : mettre le ClickPipe en pause pour arrêter la réplication" size="lg" border width="1408" height="1322" data-path="images/managed-postgres/pgpg/post-migration/pause-pipe.webp" />

<h3 id="cutover-reset-sequences">
  Étape 4 : Réinitialiser les séquences
</h3>

Réinitialisez les séquences sur la destination afin que les nouvelles insertions reprennent aux valeurs correctes. Cliquez sur **Reset sequences** pour aligner chaque séquence sur la valeur maximale actuelle de sa table.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/reset-sequences.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=6df042af5d04372c4f3ea93ebc572073" alt="Étape 4 post-migration : réinitialiser les séquences sur la destination" size="lg" border width="1382" height="1196" data-path="images/managed-postgres/pgpg/post-migration/reset-sequences.webp" />

<h3 id="cutover-traffic">
  Étape 5 : basculer le trafic
</h3>

Dirigez les lectures et les écritures vers votre service Managed Postgres en remplaçant l'URL de base de données de votre application par la connection string Managed Postgres. L'assistant fournit les connection details dans plusieurs formats — **url**, **psql**, **env**, **yaml** et **jdbc** — afin que vous puissiez copier celui qui correspond à votre stack. Une fois votre application mise à jour, cliquez sur **Mark as completed**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/cutover-traffic.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=a9ac993e5c1d9de925668c7baf169b42" alt="Étape 5 post-migration : basculer le trafic à l'aide de la connection string Managed Postgres" size="lg" border width="1486" height="1018" data-path="images/managed-postgres/pgpg/post-migration/cutover-traffic.webp" />

<h3 id="cutover-cleanup">
  Étape 6 : nettoyage
</h3>

Une fois la bascule effectuée et le bon fonctionnement du nouveau service confirmé, supprimez la migration et libérez les ressources de la source. L'assistant affiche une commande `pg_drop_replication_slot` pré-remplie avec le nom du slot — exécutez-la sur la source pour supprimer le slot de réplication :

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

Cliquez ensuite sur **Delete ClickPipe migration** pour supprimer la migration de **source de données**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/cleanup.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=bd1fc0408e1dd1b552f66cfc2f1e980e" alt="Étape 6 post-migration : nettoyage par suppression du slot de réplication et de la migration" size="lg" border width="1452" height="1432" data-path="images/managed-postgres/pgpg/post-migration/cleanup.webp" />

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

* [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)
