SELECT 和 INSERT 查询。
目前,该表引擎仅支持 PostgreSQL 12 及以上版本。
创建表
- 列名应与原始 PostgreSQL 表中的列名一致,但你也可以只使用其中部分列,且顺序不限。
- 列类型可以与原始 PostgreSQL 表中的不同。ClickHouse 会尝试将值转换为 ClickHouse 数据类型。
- external_table_functions_use_nulls 设置定义了如何处理 Nullable 列。默认值:1。如果为 0,表函数不会创建 Nullable 列,而会插入默认值来代替 null。此规则也适用于数组中的 NULL 值。
host:port— PostgreSQL 服务器地址。database— 远程数据库名称。table— 远程表名。user— PostgreSQL 用户。password— 用户密码。schema— 非默认表 schema。可选。on_conflict— 冲突解决策略。示例:ON CONFLICT DO NOTHING。可选。注意:添加此选项会降低插入效率。
实现细节
SELECT 查询会在只读的 PostgreSQL 事务中以 COPY (SELECT ...) TO STDOUT 的形式运行,并在每次 SELECT 查询后提交。
简单的 WHERE 子句,如 =, !=, >, >=, <, <= 和 IN,会在 PostgreSQL 服务器上执行。
所有 JOIN、聚合、排序、IN [ array ] 条件以及 LIMIT 采样约束,都只会在对 PostgreSQL 的查询结束后于 ClickHouse 中执行。
PostgreSQL 端的 INSERT 查询会在 PostgreSQL 事务中以 COPY "table_name" (field1, field2, ... fieldN) FROM STDIN 的形式运行,并在每条 INSERT 语句后自动提交。
PostgreSQL 的 Array 类型会转换为 ClickHouse 数组。
请注意:在 PostgreSQL 中,以
type_name[] 形式创建的数组数据,可能会在同一列的不同行中包含维度数量不同的多维数组。但在 ClickHouse 中,同一列的所有表行只允许使用维度数量相同的多维数组。| 列出。例如:
0。
在下面的示例中,副本 example01-1 的优先级最高: