Ce projet met en place une synchronisation de données entre deux bases PostgreSQL (source et destination) à l'aide d'Airbyte, avec un exemple de base de données de gestion de tâches (utilisateur, tache).
- 🐳 Docker et Docker Compose installés
- 💻 Accès à un terminal bash
docker-compose.yaml: Configuration des services Docker (Postgres source/destination)init-mysql-src.sql: Script d'initialisation de la base source (tables, données)init-mysql-des.sql: Script d'initialisation de la base destination (optionnel)
-
Lancer les conteneurs
docker compose up -d
-
Vérifier que les bases sont accessibles
- Source :
localhost:5432(utilisateur : airbyte, mot de passe : airbyte, base : tasks_list) - Destination :
localhost:5433(mêmes identifiants)
- Source :
-
Initialiser la base source
- Le script
init-mysql-src.sqlest exécuté automatiquement à la création du conteneur.
- Le script
💡 Remarque importante : Il est nécessaire d'activer l'extension vector dans les deux bases de données (source et destination) avec la commande suivante :
CREATE EXTENSION IF NOT EXISTS vector;Il faut également installer le paquet de vectorisation correspondant à la version de PostgreSQL utilisée. Par exemple, pour PostgreSQL 17 :
apt-get update && apt-get install -y \ postgresql-17-pgvector \ && rm -rf /var/lib/apt/lists/*Adaptez le nom du paquet (
postgresql-<version>-pgvector) à la version de PostgreSQL installée.
Pour installer Airbyte OSS, suivez le guide officiel :
🔗 https://docs.airbyte.com/platform/using-airbyte/getting-started/oss-quickstart
- Préremplir la configuration source Postgres
- Accorder les droits de réplication à l'utilisateur
ALTER USER airbyte REPLICATION;
- Activer la réplication logique
(à ajouter dans la configuration Postgres ou via la commande Docker)
postgres -c wal_level=logical \ -c max_replication_slots=10 \ -c max_wal_senders=10 - Créer un slot de réplication
SELECT pg_create_logical_replication_slot('airbyte_slot', 'pgoutput');
- Définir l'identité de réplication sur chaque table
Le script ci-dessous applique l'identité de réplication à toutes les tables du schéma public. Vous pouvez le modifier pour ne cibler que certaines tables à répliquer si besoin.
DO $$ DECLARE r RECORD; BEGIN FOR r IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' LOOP EXECUTE format('ALTER TABLE public.%I REPLICA IDENTITY DEFAULT;', r.tablename); END LOOP; END $$; - Créer la publication
La commande suivante crée une publication pour toutes les tables. Vous pouvez la restreindre à une liste de tables spécifiques si vous ne souhaitez répliquer qu'une partie du schéma :
CREATE PUBLICATION airbyte_publication FOR ALL TABLES; -- ou pour des tables précises : -- CREATE PUBLICATION airbyte_publication FOR TABLE utilisateur, tache;
- Table
utilisateur: id, username, email - Table
tache: id, title, description, due_date, is_completed, utilisateur_id
- Guide d'installation Airbyte OSS : https://docs.airbyte.com/platform/using-airbyte/getting-started/oss-quickstart
- Documentation Airbyte : https://docs.airbyte.com/
- Documentation Postgres : https://www.postgresql.org/docs/