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.
Prérequis
- 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
- Amazon Aurora Postgres
- Supabase Postgres
- Google Cloud SQL Postgres
- Azure Flexible Server for Postgres
- Neon Postgres
- Crunchy Bridge Postgres
- TimescaleDB
- Source Postgres générique 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.
pg_dumpetpsqlinstallés sur votre machine locale. Tous deux sont fournis avec les outils client PostgreSQL standard.
Points à prendre en compte avant la migration
- Propagation du DDL : la réplication continue (CDC) capture les opérations DML et
ADD COLUMN. Les autres modifications DDL, telles queDROP COLUMNetALTER COLUMN, ne sont pas propagées et doivent être appliquées manuellement sur la base cible.
Étape 1 : Connectez-vous à votre base de données source
Ouvrez la console ClickHouse Cloud et sélectionnez votre service Managed Postgres.

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

Cliquez sur Démarrer l'importation.

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.

Cliquez sur Suivant.
Migration automatisée du schéma

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

Monitoring
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.
Migration manuelle du schéma
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.

Exportez le schéma de votre base de données
L'assistant affiche une commande pg_dump préremplie avec les informations de connexion de votre source. Exécutez-la dans un terminal :

pg_dump \
-h <source_host> \
-U <source_user> \
-d <source_database> \
--schema-only \
-f pg.sqlCela crée pg.sql dans votre répertoire courant.

Cliquez sur Suivant.
Importez le schéma dans votre service Managed Postgres
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 :

psql \
-h <target_host> \
-p 5432 \
-U <target_user> \
-d <target_database> \
-f pg.sql
Cliquez sur Suivant.
Étape 4 : Configurer les paramètres d’ingestion
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 |

Cliquez sur Next.
Étape 5: Sélectionner les tables
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.

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

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

Tâches post-migration
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 :
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 :
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 :
-- 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 :
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 :
SELECT pg_drop_replication_slot('<slot_name>');