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ètres 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.
Les paramètres TLS/SSL sont transmis à libpq et peuvent être fournis via une collection nommée ou sous forme d’arguments clé-valeur ajoutés en fin : sslmode (disable, allow, prefer, require, verify-ca ou verify-full), ainsi que les certificats et la clé, sous l’une de deux formes. sslrootcert (certificat CA), sslcert (certificat client) et sslkey (clé privée du client) sont des chemins vers des fichiers locaux sur le serveur, acceptés uniquement depuis une collection nommée définie dans le fichier de configuration du serveur. sslrootcert_pem, sslcert_pem et sslkey_pem acceptent à la place le contenu littéral du fichier correspondant, peuvent être spécifiés depuis SQL (par exemple, ENGINE = PostgreSQL('host:port', 'database', 'user', 'password', sslmode = 'verify-full', sslrootcert_pem = '...')) et sont masqués dans les journaux et les requêtes SHOW comme un mot de passe. Lorsqu’ils ne sont pas définis, les valeurs par défaut de libpq s’appliquent (sslmode=prefer).
Prise en charge des types de données
| PostgreSQL | ClickHouse |
|---|---|
| DATE | Date |
| TIMESTAMP | DateTime |
| REAL | Float32 |
| DOUBLE | Float64 |
| DECIMAL, NUMERIC | Decimal (voir la note ci-dessous) |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| SERIAL | UInt32 |
| BIGSERIAL | UInt64 |
| TEXT, CHAR | String |
| INTEGER | Nullable(Int32) |
| ARRAY | Array |
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 TextComme 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) │
└────────┴───────────────────┘