> ## 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 vers Managed Postgres avec la réplication logique

> Découvrez comment migrer vos données PostgreSQL vers ClickHouse Managed Postgres avec la réplication logique

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

Ce guide fournit des instructions détaillées, étape par étape, pour migrer votre base de données PostgreSQL vers ClickHouse Managed Postgres à l’aide de la réplication logique native de Postgres.

<div id="migration-logical-replication-prerequisites">
  ## Prérequis
</div>

* Accès à votre base de données PostgreSQL source.
* `psql`, `pg_dump` et `pg_restore` installés sur votre machine locale. Ils servent à créer des tables vides dans votre base de données cible. Ils sont généralement inclus dans les installations de PostgreSQL. Sinon, vous pouvez les télécharger depuis le [site officiel de PostgreSQL](https://www.postgresql.org/download/).
* Votre base de données source doit être accessible depuis ClickHouse Managed Postgres. Assurez-vous que toutes les règles de pare-feu ou tous les paramètres de groupe de sécurité nécessaires autorisent cette connectivité. Vous pouvez obtenir l’adresse IP de sortie de votre instance Managed Postgres comme suit :

```shell theme={null}
dig +short <your-managed-postgres-hostname>
```

<div id="migration-logical-replication-setup">
  ## La configuration
</div>

Pour que la réplication logique fonctionne, assurez-vous que la base de données source est correctement configurée. Voici les principales exigences :

* La base de données source doit avoir `wal_level` défini sur `logical`.
* La base de données source doit avoir `max_replication_slots` défini sur au moins `1`.
* Pour RDS (utilisé ici comme exemple), vous devez vous assurer que votre groupe de paramètres a `rds.logical_replication` défini sur `1`.
* Le database user de la base de données source doit disposer du privilège `REPLICATION`. Dans le cas de RDS, exécutez :
  ```sql theme={null}
  GRANT rds_replication TO <your-username>;
  ```
* Le rôle que vous utilisez pour la base de données cible doit disposer des privilèges d'écriture sur les objets de la base de données cible :
  ```sql theme={null}
  GRANT USAGE ON SCHEMA <schema_i> TO subscriber_user;
  GRANT CREATE ON DATABASE destination_db TO subscriber_user;
  GRANT pg_create_subscription TO subscriber_user;

  -- Accorder des droits sur les tables
  GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA <schema_i> TO subscriber_user;
  ```

Assurez-vous que votre base de données source est configurée comme ceci :

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/logical_replication/source-setup.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=6b096fae0ca8c8b23ba4c5cbb9281456" alt="Configuration de la réplication de la source PostgreSQL" size="md" border width="1400" height="932" data-path="images/managed-postgres/logical_replication/source-setup.png" />

<div id="migration-logical-replication-schema-dump">
  ## Dump du schéma de la base de données source uniquement
</div>

Avant de configurer la réplication logique, nous devons créer le schéma dans la base de données cible ClickHouse Managed Postgres. Pour ce faire, nous pouvons créer un dump du schéma uniquement de la base de données source à l’aide de `pg_dump` :

```shell theme={null}
pg_dump \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    -s \
    --format directory \
    -f rds-dump
```

Ici :

* Remplacez `<user>`, `<password>`, `<host>`, `<port>` et `<database>` par les credentials de votre base de données source.
* `-s` indique que nous voulons un dump du schéma uniquement.
* `--format directory` indique que nous voulons un dump au format répertoire, adapté à `pg_restore`.
* `-f rds-dump` indique le répertoire de sortie des fichiers du dump. Notez que ce répertoire sera créé automatiquement et ne doit pas exister au préalable.

Dans notre cas, nous avons deux tables : `events` et `users`. `events` contient un million de lignes, et `users` en contient mille.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pg_dump_restore/source-setup.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=491bc2e86f385054c8116acb6720babe" alt="Configuration des tables PostgreSQL sources" size="xl" border width="3766" height="2312" data-path="images/managed-postgres/pg_dump_restore/source-setup.png" />

<div id="migration-pgdump-pg-restore-create-pg">
  ### Créez une instance Managed Postgres
</div>

Assurez-vous d’abord d’avoir configuré une instance Managed Postgres, de préférence dans la même région que la base source. Vous pouvez suivre le guide de démarrage rapide [ici](/fr/products/managed-postgres/quickstart#create-postgres-database). Voici ce que nous allons provisionner pour ce guide :

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pg_dump_restore/create-pg-for-migration.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=d8cb2e9e932c81c2ad7d0ba62c8958da" alt="Création d’une instance ClickHouse Managed Postgres" size="md" border width="1532" height="1570" data-path="images/managed-postgres/pg_dump_restore/create-pg-for-migration.png" />

<div id="migration-logical-replication-restore-schema">
  ## Restaurer le schéma dans ClickHouse Managed Postgres
</div>

Maintenant que nous disposons du dump du schéma, nous pouvons le restaurer dans notre instance ClickHouse Managed Postgres à l’aide de `pg_restore` :

```shell theme={null}
pg_restore \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    --verbose \
    rds-dump
```

Ici :

* Remplacez `<user>`, `<password>`, `<host>`, `<port>` et `<database>` par les identifiants de connexion de votre base de données cible ClickHouse Managed Postgres.
* `--verbose` fournit une sortie détaillée pendant le processus de restauration.
  Cette commande créera toutes les tables, tous les index, toutes les vues et les autres objets du schéma dans la base de données cible, sans aucune donnée.

Dans notre cas, après avoir exécuté cette commande, nous avons nos deux tables et elles sont vides :

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/logical_replication/target-initial-setup.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=093e10187738fb6c082c391d57a4a81e" alt="Configuration initiale de la cible ClickHouse Managed Postgres" size="xl" border width="2019" height="445" data-path="images/managed-postgres/logical_replication/target-initial-setup.png" />

<div id="migration-logical-replication-setup-replication">
  ## Configurer la réplication logique
</div>

Le schéma étant en place, nous pouvons maintenant configurer la réplication logique de la base de données source vers la base de données cible ClickHouse Managed Postgres. Cela consiste à créer une publication sur la base de données source et un abonnement sur la base de données cible.

<div id="migration-logical-replication-create-publication">
  ### Créer une publication dans la base de données source
</div>

Connectez-vous à votre base de données PostgreSQL source et créez une publication incluant les tables que vous souhaitez répliquer.

```sql theme={null}
CREATE PUBLICATION <pub_name> FOR TABLE table1, table2...;
```

<Info>
  La création d’une publication FOR ALL TABLES peut entraîner un surcoût réseau s’il existe un grand nombre de tables. Il est recommandé de ne spécifier que les tables que vous souhaitez répliquer.
</Info>

<div id="migration-logical-replication-create-subscription">
  ### Créer un abonnement sur la base de données ClickHouse Managed Postgres cible
</div>

Ensuite, connectez-vous à votre base de données ClickHouse Managed Postgres cible et créez un abonnement relié à la publication de la base de données source.

```sql theme={null}
CREATE SUBSCRIPTION demo_rds_subscription
CONNECTION 'postgresql://<user>:<password>@<host>:<port>/<database>'
PUBLICATION <pub_name_you_entered_above>;
```

Cela créera automatiquement un slot de réplication sur la base de données source et commencera à répliquer les données des tables spécifiées vers la base de données cible. Selon le volume de vos données, ce processus peut prendre un certain temps.

Dans notre cas, après avoir configuré l’abonnement, les données ont commencé à arriver :

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/logical_replication/migration-result.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=89c3a5ba9125bc33afb4b104dd65af4b" alt="Résultat de la migration après la réplication logique" size="xl" border width="1920" height="658" data-path="images/managed-postgres/logical_replication/migration-result.png" />

Les nouvelles lignes insérées dans la base de données source seront désormais répliquées vers la base de données cible ClickHouse Managed Postgres en quasi temps réel.

<div id="migration-logical-replication-caveats">
  ## Limites et points à prendre en compte
</div>

* La réplication logique ne réplique que les changements de données (INSERT, UPDATE, DELETE). Les changements de schéma (comme ALTER TABLE) doivent être gérés séparément.
* Assurez-vous que la connexion réseau entre les bases de données source et cible est stable afin d’éviter toute interruption de la réplication.
* Surveillez le retard de réplication pour vous assurer que la base de données cible suit bien la base de données source. Définir une valeur appropriée pour `max_slot_wal_keep_size` sur la base de données source peut aider à gérer la croissance d’un slot de réplication et à éviter qu’il ne consomme trop d’espace disque.
* Selon votre cas d’usage, vous pouvez envisager de mettre en place une supervision et des alertes pour le processus de réplication.

<div id="migration-pgdump-pg-restore-next-steps">
  ## Étapes suivantes
</div>

Félicitations ! Vous avez migré avec succès votre base de données PostgreSQL vers ClickHouse Managed Postgres à l’aide de pg\_dump et pg\_restore. Vous pouvez maintenant découvrir les fonctionnalités de Managed Postgres et son intégration avec ClickHouse. Voici un quickstart de 10 minutes pour bien démarrer :

* [Guide de quickstart de Managed Postgres](/fr/products/managed-postgres/quickstart)
