Skip to main content
允许对存储在远程 PostgreSQL 服务器上的数据执行 SELECT 和 INSERT 查询。

语法

参数

参数也可以通过命名集合传递。在这种情况下,需要分别指定 host 和 port。建议在生产环境中使用这种方式。

返回值

一个表对象,包含与原始 PostgreSQL 表相同的列。
在 INSERT 查询中,为了将表函数 postgresql(...) 与带列名列表的表名区分开,必须使用关键字 FUNCTION 或 TABLE FUNCTION。请参见下面的示例。

Implementation Details

PostgreSQL 端的 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 中,像 Integer[] 这样的数组数据类型列在不同的行中可能包含维度不同的数组,但在 ClickHouse 中,只允许所有行中的多维数组具有相同的维度。
支持多个副本,必须使用 | 分隔列出。例如:
或
支持为 PostgreSQL 字典源设置副本优先级。map 中的数值越大,优先级越低。最高优先级为 0。

示例

PostgreSQL 中的表:
使用普通参数从 ClickHouse 中查询数据:
或者使用命名集合:
插入:
使用非默认 schema:

使用 PeerDB 复制或迁移 Postgres 数据

除了表函数之外,您也始终可以使用 ClickHouse 的 PeerDB,建立从 Postgres 到 ClickHouse 的持续数据管道。PeerDB 是一款专为通过 CDC (变更数据捕获) 将数据从 Postgres 复制到 ClickHouse 而设计的工具。
最后修改于 2026年6月10日