Passer au contenu principal
Permet de se connecter à des bases de données sur un serveur PostgreSQL distant. Prend en charge les opérations de lecture et d’écriture (requêtes SELECT et INSERT) pour échanger des données entre ClickHouse et PostgreSQL. Fournit un accès en temps réel à la liste et à la structure des tables du serveur PostgreSQL distant à l’aide des requêtes SHOW TABLES et DESCRIBE TABLE. Prend en charge les modifications de la structure des tables (ALTER TABLE ... ADD|DROP COLUMN). Si le paramètre use_table_cache (voir la section paramètre du moteur ci-dessous) est défini sur 1, la structure de la table est mise en cache et les modifications ne sont pas vérifiées, mais elle peut être mise à jour avec les requêtes DETACH et ATTACH.

Créer une base de données

CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use_table_cache`]);
Paramètres du moteur
  • host:port — Adresse du serveur PostgreSQL.
  • database — Nom de la base de données distante.
  • user — Utilisateur PostgreSQL.
  • password — Mot de passe de l’utilisateur.
  • schema — Schéma PostgreSQL.
  • use_table_cache — Définit si la structure de la table de la base de données est mise en cache ou non. Facultatif. Valeur par défaut : 0.

Prise en charge des types de données

PostgreSQLClickHouse
DATEDate
TIMESTAMPDateTime
REALFloat32
DOUBLEFloat64
DECIMAL, NUMERICDecimal (voir la note ci-dessous)
SMALLINTInt16
INTEGERInt32
BIGINTInt64
SERIALUInt32
BIGSERIALUInt64
TEXT, CHARString
INTEGERNullable(Int32)
ARRAYArray
Le type PostgreSQL numeric(p, 0) avec une précision p supérieure à 76 (le maximum pris en charge par Decimal256) — par exemple numeric(78, 0), couramment utilisé pour stocker des entiers sur 256 bits — est converti en Int256 plutôt qu’en Decimal. Les valeurs qui ne peuvent pas être représentées dans la plage de Int256 sont rejetées avec une erreur.

Exemples d’utilisation

Base de données dans ClickHouse échangeant des données avec le serveur PostgreSQL :
CREATE DATABASE test_database
ENGINE = PostgreSQL('postgres1:5432', 'test_database', 'postgres', 'mysecretpassword', 'schema_name',1);
SHOW DATABASES;
┌─name──────────┐
│ default       │
│ test_database │
│ system        │
└───────────────┘
SHOW TABLES FROM test_database;
┌─name───────┐
│ test_table │
└────────────┘
Lecture des données de la table PostgreSQL :
SELECT * FROM test_database.test_table;
┌─id─┬─value─┐
│  1 │     2 │
└────┴───────┘
Écriture des données dans la table PostgreSQL :
INSERT INTO test_database.test_table VALUES (3,4);
SELECT * FROM test_database.test_table;
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘
Supposons que la structure de la table ait été modifiée dans PostgreSQL :
postgre> ALTER TABLE test_table ADD COLUMN data Text
Comme le paramètre use_table_cache a été défini sur 1 lors de la création de la base de données, la structure de la table dans ClickHouse a été mise en cache et n’a donc pas été modifiée :
DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
└────────┴───────────────────┘
Après avoir détaché la table puis l’avoir rattachée, la structure a été mise à jour :
DETACH TABLE test_database.test_table;
ATTACH TABLE test_database.test_table;
DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
│ data   │ Nullable(String)  │
└────────┴───────────────────┘
Dernière modification le 25 juin 2026