> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.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}) => {
  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>
                Fonctionnalité en bêta. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        En savoir plus.
                    </a>
                </u>
            </span>
        </div>;
};

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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/servicecard.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=35b4ed98588ee470642dfc7453b14d1a" 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.png" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/overview.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=4f33e628dbcd912685a9ccb2faf181a8" 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.png" />

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

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

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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/migrationform.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=fdd536e59d938bedffeed155f32031ae" 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.png" />

Cliquez sur **Suivant**.

<div id="step-2-export-schema">
  ## Étape 2 : 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 base source. Exécutez-la dans un terminal :

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/nextexport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=ad7b5842e52e966aa59aba511a4e0fc7" 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.png" />

```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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/psqlexport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=035b28f3e653c7a8b0580c2d8b6b5a70" 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.png" />

Cliquez sur **Suivant**.

<div id="step-3-import-schema">
  ## Étape 3 : 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 créer 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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/nextimport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=bd31e27b0b1866cc753f02ecb31828b1" alt="Étape 3 : commande psql pour l’importation du schéma" 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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/psqlimport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=c1c8977b4647ab91cb89bb7fb3e420e9" alt="Sortie du terminal après l’import du schéma avec psql" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.png" />

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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/advancedsettings.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=46ba5acabe9c33441073e03007a685e7" 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.png" />

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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/tablepicker.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=3fc4d8f0b598444b5f5c1c4d1bbad630" 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.png" />

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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/migrationlist.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=52e602303778c89396e6bac313e01565" 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.png" />

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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/initialload.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=df0405da62ed47dcde506b5ff99a297c" 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.png" />

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

* [Démarrage rapide de Managed Postgres](/fr/products/managed-postgres/quickstart)
* [Paramètres de connexion de Managed Postgres](/fr/products/managed-postgres/connection)
* [FAQ ClickPipes pour Postgres](/fr/integrations/clickpipes/postgres/faq)
