允许连接到远程 PostgreSQL 服务器上的数据库。支持读写操作 (SELECT 和 INSERT 查询) ,以便在 ClickHouse 与 PostgreSQL 之间交换数据。
借助 SHOW TABLES 和 DESCRIBE TABLE 查询,可以实时访问远程 PostgreSQL 中的表列表和表结构。
支持表结构修改 (ALTER TABLE ... ADD|DROP COLUMN) 。如果 use_table_cache 参数 (参见下方的引擎参数) 设置为 1,则表结构会被缓存,且不会检查是否发生修改,但可以通过 DETACH 和 ATTACH 查询更新。
创建数据库
CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use_table_cache`]);引擎参数
host:port— PostgreSQL 服务器地址。database— 远程数据库名称。user— PostgreSQL 用户。password— 用户密码。schema— PostgreSQL schema。use_table_cache— 定义是否缓存数据库表结构。可选。默认值:0。
TLS/SSL 参数会转发给 libpq,可通过命名集合提供,也可作为末尾的键值参数提供:sslmode (disable、allow、prefer、require、verify-ca 或 verify-full) ,以及以下两种形式之一的证书和密钥。sslrootcert (CA 证书) 、sslcert (客户端证书) 和 sslkey (客户端私钥) 是服务器本地文件的路径,仅接受服务器配置文件中定义的命名集合提供的值。sslrootcert_pem、sslcert_pem 和 sslkey_pem 则接受相应文件的字面内容,可通过 SQL 指定 (例如,ENGINE = PostgreSQL('host:port', 'database', 'user', 'password', sslmode = 'verify-full', sslrootcert_pem = '...')) ,并且会像密码一样在日志和 SHOW 查询中被隐藏。未设置时,将使用 libpq 默认值 (sslmode=prefer) 。
支持的数据类型
| PostgreSQL | ClickHouse |
|---|---|
| DATE | Date |
| TIMESTAMP | DateTime |
| REAL | Float32 |
| DOUBLE | Float64 |
| DECIMAL, NUMERIC | Decimal (见下方说明) |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| SERIAL | UInt32 |
| BIGSERIAL | UInt64 |
| TEXT, CHAR | String |
| INTEGER | Nullable(Int32) |
| ARRAY | Array |
使用示例
ClickHouse 中的数据库与 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 │
└────────────┘从 PostgreSQL 表中读取数据:
SELECT * FROM test_database.test_table;┌─id─┬─value─┐
│ 1 │ 2 │
└────┴───────┘向 PostgreSQL 表写入数据:
INSERT INTO test_database.test_table VALUES (3,4);
SELECT * FROM test_database.test_table;┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘假设 PostgreSQL 中的表结构已发生修改:
postgre> ALTER TABLE test_table ADD COLUMN data Text由于创建数据库时已将 use_table_cache 参数设为 1,ClickHouse 中的表结构已被缓存,因此不会被修改:
DESCRIBE TABLE test_database.test_table;┌─name───┬─type──────────────┐
│ id │ Nullable(Integer) │
│ value │ Nullable(Integer) │
└────────┴───────────────────┘将该表分离并重新附加后,其结构已更新:
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) │
└────────┴───────────────────┘