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

# PostgreSQL

> Page expliquant comment intégrer Postgres à ClickHouse

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" 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
        </a>;
};

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" 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
        </a>;
};

> Un guide complet de migration de PostgreSQL vers ClickHouse, avec des conseils sur la modélisation des données et les concepts équivalents, est disponible [ici](/fr/get-started/migrate/postgres/overview). La suite explique comment connecter ClickHouse à PostgreSQL.

Cette page présente les options suivantes pour intégrer PostgreSQL à ClickHouse :

* utiliser le moteur de table `PostgreSQL` pour lire les données d'une table PostgreSQL
* utiliser le moteur de base de données expérimental `MaterializedPostgreSQL` pour synchroniser une base de données PostgreSQL avec une base de données ClickHouse

<Tip>
  Découvrez notre service [ClickHouse Managed Postgres](/fr/products/managed-postgres/overview). S'appuyant sur un stockage NVMe physiquement co-localisé avec les ressources de calcul, il offre des performances jusqu'à 10x supérieures pour les workloads limités par le disque par rapport aux solutions reposant sur un stockage en réseau comme EBS, et vous permet de répliquer vos données Postgres vers ClickHouse à l'aide du connecteur Postgres CDC dans ClickPipes.
</Tip>

<div id="using-the-postgresql-table-engine">
  ## Utilisation du moteur de table PostgreSQL
</div>

Le moteur de table `PostgreSQL` permet d'exécuter des opérations **SELECT** et **INSERT** sur des données stockées sur un serveur PostgreSQL distant depuis ClickHouse.
Cet article illustre les méthodes de base pour l'intégration à l'aide d'une table.

<Steps>
  <Step title="Configurer PostgreSQL" id="1-setting-up-postgresql">
    1. Dans `postgresql.conf`, ajoutez l’entrée suivante pour que PostgreSQL écoute sur les interfaces réseau :

    ```text theme={null}
    listen_addresses = '*'
    ```

    2. Créez un utilisateur permettant de se connecter depuis ClickHouse. À des fins de démonstration, cet exemple accorde tous les privilèges de superutilisateur.

    ```sql theme={null}
    CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';
    ```

    3. Créez une nouvelle base de données dans PostgreSQL :

    ```sql theme={null}
    CREATE DATABASE db_in_psg;
    ```

    4. Créez une nouvelle table :

    ```sql theme={null}
    CREATE TABLE table1 (
        id         integer primary key,
        column1    varchar(10)
    );
    ```

    5. Ajoutons quelques lignes pour effectuer des tests :

    ```sql theme={null}
    INSERT INTO table1
      (id, column1)
    VALUES
      (1, 'abc'),
      (2, 'def');
    ```

    6. Pour configurer PostgreSQL afin d’autoriser les connexions à la nouvelle base de données avec le nouvel utilisateur pour la réplication, ajoutez l’entrée suivante au fichier `pg_hba.conf`. Mettez à jour la ligne d’adresse avec le sous-réseau ou l’adresse IP de votre serveur PostgreSQL :

    ```text theme={null}
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host    db_in_psg             clickhouse_user 192.168.1.0/24          password
    ```

    7. Rechargez la configuration `pg_hba.conf` (adaptez cette commande à votre version) :

    ```text theme={null}
    /usr/pgsql-12/bin/pg_ctl reload
    ```

    8. Vérifiez que le nouvel utilisateur `clickhouse_user` peut se connecter :

    ```text theme={null}
    psql -U clickhouse_user -W -d db_in_psg -h <your_postgresql_host>
    ```

    <Note>
      Si vous utilisez cette fonctionnalité dans ClickHouse Cloud, vous devrez peut-être autoriser l’accès à votre instance PostgreSQL depuis les adresses IP de ClickHouse Cloud.
      Consultez la [Cloud Endpoints API](/fr/products/cloud/guides/sql-console/query-endpoints) de ClickHouse pour obtenir des détails sur le trafic d’egress.
    </Note>
  </Step>

  <Step title="Définir une table dans ClickHouse" id="2-define-a-table-in-clickhouse">
    1. Connectez-vous à `clickhouse-client` :

    ```bash theme={null}
    clickhouse-client --user default --password ClickHouse123!
    ```

    2. Créons une nouvelle base de données :

    ```sql theme={null}
    CREATE DATABASE db_in_ch;
    ```

    3. Créez une table qui utilise `PostgreSQL` :

    ```sql theme={null}
    CREATE TABLE db_in_ch.table1
    (
        id UInt64,
        column1 String
    )
    ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'clickhouse_user', 'ClickHouse_123');
    ```

    Les paramètres minimaux requis sont :

    | paramètre | Description                                      | exemple                       |
    | --------- | ------------------------------------------------ | ----------------------------- |
    | host:port | hostname ou adresse IP et port                   | postgres-host.domain.com:5432 |
    | database  | nom de la base de données PostgreSQL             | db\_in\_psg                   |
    | user      | nom d’utilisateur pour se connecter à PostgreSQL | clickhouse\_user              |
    | password  | mot de passe pour se connecter à PostgreSQL      | ClickHouse\_123               |

    <Note>
      Consultez la page de documentation [PostgreSQL table engine](/fr/reference/engines/table-engines/integrations/postgresql) pour obtenir la liste complète des paramètres.
    </Note>
  </Step>

  <Step title="Tester l’intégration" id="3-test-the-integration">
    1. Dans ClickHouse, affichez les premières lignes :

    ```sql theme={null}
    SELECT * FROM db_in_ch.table1
    ```

    La table ClickHouse devrait être automatiquement renseignée avec les deux lignes déjà présentes dans la table PostgreSQL :

    ```response theme={null}
    Query id: 34193d31-fe21-44ac-a182-36aaefbd78bf

    ┌─id─┬─column1─┐
    │  1 │ abc     │
    │  2 │ def     │
    └────┴─────────┘
    ```

    2. De retour dans PostgreSQL, ajoutez quelques lignes à la table :

    ```sql theme={null}
    INSERT INTO table1
      (id, column1)
    VALUES
      (3, 'ghi'),
      (4, 'jkl');
    ```

    4. Ces deux nouvelles lignes devraient apparaître dans votre table ClickHouse :

    ```sql theme={null}
    SELECT * FROM db_in_ch.table1
    ```

    La réponse doit être :

    ```response theme={null}
    Query id: 86fa2c62-d320-4e47-b564-47ebf3d5d27b

    ┌─id─┬─column1─┐
    │  1 │ abc     │
    │  2 │ def     │
    │  3 │ ghi     │
    │  4 │ jkl     │
    └────┴─────────┘
    ```

    5. Voyons ce qui se passe lorsque vous ajoutez des lignes à la table ClickHouse :

    ```sql theme={null}
    INSERT INTO db_in_ch.table1
      (id, column1)
    VALUES
      (5, 'mno'),
      (6, 'pqr');
    ```

    6. Les lignes ajoutées dans ClickHouse devraient apparaître dans la table PostgreSQL :

    ```sql theme={null}
    db_in_psg=# SELECT * FROM table1;
    id | column1
    ----+---------
      1 | abc
      2 | def
      3 | ghi
      4 | jkl
      5 | mno
      6 | pqr
    (6 rows)
    ```
  </Step>
</Steps>

Cet exemple a montré l’intégration de base entre PostgreSQL et ClickHouse à l’aide du moteur de table `PostrgeSQL`.
Consultez la [page de documentation du moteur de table PostgreSQL](/fr/reference/engines/table-engines/integrations/postgresql) pour découvrir d’autres fonctionnalités, comme la spécification de schémas, le renvoi d’un sous-ensemble de colonnes et la connexion à plusieurs répliques. Consultez également le billet de blog [ClickHouse and PostgreSQL - a match made in data heaven - partie 1](https://clickhouse.com/blog/migrating-data-between-clickhouse-postgres).

<div id="using-the-materializedpostgresql-database-engine">
  ## Utilisation du moteur de base de données MaterializedPostgreSQL
</div>

<CloudNotSupportedBadge />

<ExperimentalBadge />

Le moteur de base de données PostgreSQL utilise les fonctionnalités de réplication de PostgreSQL pour créer une réplique de la base de données contenant tout ou partie des schémas et des tables.
Cet article vise à illustrer les méthodes de base d’intégration à l’aide d’une base de données, d’un schéma et d’une table.

***Dans les procédures suivantes, la CLI PostgreSQL (psql) et la ClickHouse CLI (clickhouse-client) sont utilisées. Le serveur PostgreSQL est installé sur Linux. La configuration ci-dessous présente les paramètres minimaux si la base de données PostgreSQL est une nouvelle installation de test.***

<Steps>
  <Step title="Dans PostgreSQL" id="1-in-postgresql">
    1. Dans `postgresql.conf`, définissez les niveaux d'écoute minimums, le wal level de réplication et les slots de réplication :

    ajoutez les entrées suivantes :

    ```text theme={null}
    listen_addresses = '*'
    max_replication_slots = 10
    wal_level = logical
    ```

    \**ClickHouse nécessite au minimum le wal level `logical` et au moins `2` replication slots*

    2. Avec un compte Admin, créez un utilisateur pour vous connecter depuis ClickHouse :

    ```sql theme={null}
    CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';
    ```

    \**pour les besoins de la démonstration, tous les droits de superutilisateur ont été accordés.*

    3. créez une nouvelle base de données :

    ```sql theme={null}
    CREATE DATABASE db1;
    ```

    4. connectez-vous à la nouvelle base de données avec `psql` :

    ```text theme={null}
    \connect db1
    ```

    5. créez une nouvelle table :

    ```sql theme={null}
    CREATE TABLE table1 (
        id         integer primary key,
        column1    varchar(10)
    );
    ```

    6. ajouter les premières lignes :

    ```sql theme={null}
    INSERT INTO table1
    (id, column1)
    VALUES
    (1, 'abc'),
    (2, 'def');
    ```

    7. Configurez PostgreSQL pour autoriser les connexions à la nouvelle base de données avec le nouvel utilisateur pour la réplication. Voici l’entrée minimale à ajouter au fichier `pg_hba.conf` :

    ```text theme={null}
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host    db1             clickhouse_user 192.168.1.0/24          password
    ```

    \**à des fins de démonstration, cette méthode utilise l’authentification par mot de passe en clair. mettez à jour la ligne d’adresse avec soit le sous-réseau, soit l’adresse du serveur, conformément à la documentation PostgreSQL*

    8. rechargez la configuration `pg_hba.conf` avec une commande semblable à celle-ci (à adapter selon votre version) :

    ```text theme={null}
    /usr/pgsql-12/bin/pg_ctl reload
    ```

    9. Testez la connexion avec le nouvel utilisateur `clickhouse_user` :

    ```text theme={null}
     psql -U clickhouse_user -W -d db1 -h <your_postgresql_host>
    ```
  </Step>

  <Step title="Dans ClickHouse" id="2-in-clickhouse">
    1. connectez-vous à l’interface CLI de ClickHouse

    ```bash theme={null}
    clickhouse-client --user default --password ClickHouse123!
    ```

    2. Activez la fonctionnalité expérimentale PostgreSQL pour le moteur de base de données :

    ```sql theme={null}
    SET allow_experimental_database_materialized_postgresql=1
    ```

    3. Créez la nouvelle base de données à répliquer et définissez la table initiale :

    ```sql theme={null}
    CREATE DATABASE db1_postgres
    ENGINE = MaterializedPostgreSQL('postgres-host.domain.com:5432', 'db1', 'clickhouse_user', 'ClickHouse_123')
    SETTINGS materialized_postgresql_tables_list = 'table1';
    ```

    options minimales :

    | paramètre | Description                                    | exemple                                           |
    | --------- | ---------------------------------------------- | ------------------------------------------------- |
    | host:port | nom d’hôte ou adresse IP et port               | postgres-host.domain.com:5432                     |
    | database  | nom de la base de données PostgreSQL           | db1                                               |
    | user      | nom d’utilisateur pour se connecter à Postgres | clickhouse\_user                                  |
    | password  | mot de passe pour se connecter à Postgres      | ClickHouse\_123                                   |
    | settings  | paramètres supplémentaires du moteur           | materialized\_postgresql\_tables\_list = 'table1' |

    <Info>
      Pour consulter le guide complet sur le moteur de base de données PostgreSQL, rendez-vous sur [https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings](https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings)
    </Info>

    4. Vérifiez que la table initiale contient des données :

    ```sql theme={null}
    ch_env_2 :) select * from db1_postgres.table1;

    SELECT *
    FROM db1_postgres.table1
    ```

    ```response theme={null}
    Query id: df2381ac-4e30-4535-b22e-8be3894aaafc

    ┌─id─┬─column1─┐
    │  1 │ abc     │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │  2 │ def     │
    └────┴─────────┘
    ```
  </Step>

  <Step title="Tester la réplication" id="3-test-basic-replication">
    1. Dans PostgreSQL, ajoutez de nouvelles lignes :

    ```sql theme={null}
    INSERT INTO table1
    (id, column1)
    VALUES
    (3, 'ghi'),
    (4, 'jkl');
    ```

    2. Dans ClickHouse, vérifiez que les nouvelles lignes sont visibles :

    ```sql theme={null}
    ch_env_2 :) select * from db1_postgres.table1;

    SELECT *
    FROM db1_postgres.table1
    ```

    ```response theme={null}
    Query id: b0729816-3917-44d3-8d1a-fed912fb59ce

    ┌─id─┬─column1─┐
    │  1 │ abc     │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │  4 │ jkl     │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │  3 │ ghi     │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │  2 │ def     │
    └────┴─────────┘
    ```
  </Step>

  <Step title="Résumé" id="4-summary">
    Ce guide d’intégration présente un exemple simple de réplication d’une base de données contenant une table. Des options plus avancées permettent toutefois de répliquer l’intégralité de la base de données ou d’ajouter de nouvelles tables et de nouveaux schémas aux réplications existantes. Bien que les commandes DDL ne soient pas prises en charge par cette réplication, le moteur peut être configuré pour détecter les modifications structurelles et recharger les tables en conséquence.

    <Info>
      Pour découvrir davantage de fonctionnalités des options avancées, consultez la [documentation de référence](/fr/reference/engines/database-engines/materialized-postgresql).
    </Info>
  </Step>
</Steps>
