> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Crée une table ClickHouse à partir d'un dump initial d'une table PostgreSQL et lance le processus de réplication.

# Moteur de table MaterializedPostgreSQL

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Non pris en charge par ClickHouse Cloud
        </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Fonctionnalité expérimentale. <u><a href="/docs/beta-and-experimental-features#experimental-features">En savoir plus.</a></u>
        </div>;
};

<Note>
  Il est recommandé aux utilisateurs de ClickHouse Cloud d’utiliser [ClickPipes](/fr/integrations/clickpipes/home) pour la réplication de PostgreSQL vers ClickHouse. Cette solution prend nativement en charge le Change Data Capture (CDC) hautes performances pour PostgreSQL.
</Note>

Crée une table ClickHouse à partir d’un dump initial d’une table PostgreSQL et lance le processus de réplication, c.-à-d. exécute une tâche en arrière-plan pour appliquer les nouvelles modifications au fur et à mesure qu’elles surviennent dans la table PostgreSQL de la base de données PostgreSQL distante.

<Note>
  Ce moteur de table est expérimental. Pour l’utiliser, définissez `allow_experimental_materialized_postgresql_table` sur 1 dans vos fichiers de configuration ou à l’aide de la commande `SET` :

  ```sql theme={null}
  SET allow_experimental_materialized_postgresql_table=1
  ```
</Note>

Si plusieurs tables sont nécessaires, il est fortement recommandé d’utiliser le moteur de base de données [MaterializedPostgreSQL](/fr/reference/engines/database-engines/materialized-postgresql) plutôt que le moteur de table, ainsi que le paramètre `materialized_postgresql_tables_list`, qui spécifie les tables à répliquer (il sera également possible d’ajouter le `schema` de la base de données). Les performances seront nettement meilleures en termes d’utilisation du CPU, avec moins de connexions et moins de slots de réplication dans la base de données PostgreSQL distante.

<div id="creating-a-table">
  ## Création d’une table
</div>

```sql theme={null}
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
```

**Paramètres du moteur**

* `host:port` — Adresse du serveur PostgreSQL.
* `database` — Nom de la base de données distante.
* `table` — Nom de la table distante.
* `user` — Utilisateur PostgreSQL.
* `password` — Mot de passe de l’utilisateur.

<div id="requirements">
  ## Prérequis
</div>

1. Le paramètre [wal\_level](https://www.postgresql.org/docs/current/runtime-config-wal.html) doit avoir la valeur `logical`, et le paramètre `max_replication_slots` doit avoir une valeur d’au moins `2` dans le fichier de configuration de PostgreSQL.

2. Une table utilisant le moteur `MaterializedPostgreSQL` doit avoir une clé primaire, identique à l’index de replica identity (par défaut : la clé primaire) d’une table PostgreSQL (voir les [détails sur l’index de replica identity](/fr/reference/engines/database-engines/materialized-postgresql#requirements)).

3. Seul le moteur de base de données [Atomic](https://en.wikipedia.org/wiki/Atomicity_\(database_systems\)) est autorisé.

4. Le moteur de table `MaterializedPostgreSQL` fonctionne uniquement avec les versions de PostgreSQL >= 11, car son implémentation nécessite la fonction PostgreSQL [pg\_replication\_slot\_advance](https://pgpedia.info/p/pg_replication_slot_advance.html).

<div id="virtual-columns">
  ## Colonnes virtuelles
</div>

* `_version` — Compteur de transactions. Type : [UInt64](/fr/reference/data-types/int-uint).

* `_sign` — Indicateur de suppression. Type : [Int8](/fr/reference/data-types/int-uint). Valeurs possibles :
  * `1` — La ligne n’est pas supprimée,
  * `-1` — La ligne est supprimée.

Il n’est pas nécessaire d’ajouter ces colonnes lors de la création d’une table. Elles sont toujours accessibles dans une requête `SELECT`.
La colonne `_version` correspond à la position `LSN` dans le `WAL` et peut donc être utilisée pour vérifier à quel point la réplication est à jour.

```sql theme={null}
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;

SELECT key, value, _version FROM postgresql_db.postgresql_replica;
```

<Note>
  La réplication des valeurs [**TOAST**](https://www.postgresql.org/docs/9.5/storage-toast.html) n’est pas prise en charge. La valeur par défaut du type de données est utilisée.
</Note>
