跳到主要内容
跳到主要内容

postgresql 表函数

允许对存储在远程 PostgreSQL 服务器上的数据执行 SELECTINSERT 查询。

语法

参数

参数描述
host:portPostgreSQL 服务器地址。
database远程数据库名称。
table远程表名称。
userPostgreSQL 用户。
password用户密码。
schema非默认表模式。可选。
on_conflict冲突解决策略。示例:ON CONFLICT DO NOTHING。可选。

参数也可以使用 命名集合 传递。在这种情况下,hostport 应该单独指定。这种方法推荐用于生产环境。

返回值

具有与原始 PostgreSQL 表相同列的表对象。

备注

INSERT 查询中,为了区分表函数 postgresql(...) 和表名(带列名列表),必须使用关键字 FUNCTIONTABLE FUNCTION。请参见下面的示例。

实现细节

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 数组类型转换为 ClickHouse 数组。

备注

请注意,在 PostgreSQL 中,像 Integer[] 这样的数组数据类型列可能在不同的行中包含不同维度的数组,但在 ClickHouse 中,所有行中仅允许具有相同维度的多维数组。

支持多个副本,必须用 | 列出。例如:

或者

支持 PostgreSQL 字典源的副本优先级。映射中数字越大,优先级越低。最高优先级为 0

示例

PostgreSQL 中的表:

使用普通参数从 ClickHouse 中选择数据:

或者使用 命名集合

插入:

使用非默认架构:

使用 PeerDB 复制或迁移 Postgres 数据

除了表函数,您还可以始终使用 PeerDB 来从 Postgres 到 ClickHouse 设置持续的数据管道。PeerDB 是一个专门设计用于通过变更数据捕获 (CDC) 将数据从 Postgres 复制到 ClickHouse 的工具。