PostgreSQL
PostgreSQL 引擎允许 ClickHouse 对存储在远程 PostgreSQL 服务器上的数据执行 SELECT
和 INSERT
查询.
创建一张表
表结构可以与 PostgreSQL 源表结构不同:
- 列名应与 PostgreSQL 源表中的列名相同,但您可以按任何顺序使用其中的一些列。
- 列类型可能与源表中的列类型不同。 ClickHouse尝试将数值映射 到ClickHouse的数据类型。
- 设置
external_table_functions_use_nulls
来定义如何处理 Nullable 列. 默认值是 1, 当设置为 0 时 - 表函数将不会使用 nullable 列,而是插入默认值来代替 null. 这同样适用于数组数据类型中的 null 值.
引擎参数
host:port
— PostgreSQL 服务器地址.database
— 数据库名称.table
— 表名称.user
— PostgreSQL 用户.password
— 用户密码.schema
— Non-default table schema. 可选.
实施细节
在 PostgreSQL 上的 SELECT
查询以 COPY (SELECT ...) TO STDOUT
的方式在只读 PostgreSQL 事务中运行,每次 SELECT
查询后提交。
简单的 WHERE
子句,如=
,!=
,>
,>=
,<
,<=
,和IN
是在PostgreSQL 服务器上执行。
所有的连接、聚合、排序、IN [ array ]
条件和LIMIT
采样约束都是在 PostgreSQL 的查询结束后才在ClickHouse中执行的。
在 PostgreSQL 上的 INSERT
查询以 COPY "table_name" (field1, field2, ... fieldN) FROM STDIN
的方式在 PostgreSQL 事务中运行,每条 INSERT
语句后自动提交。
PostgreSQL 的 Array
类型会被转换为 ClickHouse 数组。
!!! info "Note"
要小心 - 一个在 PostgreSQL 中的数组数据,像type_name[]
这样创建,可以在同一列的不同表行中包含不同维度的多维数组。但是在 ClickHouse 中,只允许在同一列的所有表行中包含相同维数的多维数组。
支持设置 PostgreSQL 字典源中 Replicas 的优先级。地图中的数字越大,优先级就越低。最高的优先级是 0
。
在下面的例子中,副本example01-1
有最高的优先级。
用法示例
PostgreSQL 中的表:
ClickHouse 中的表, 从上面创建的 PostgreSQL 表中检索数据:
使用非默认的模式:
另请参阅