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

postgresql 表函数

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

语法

参数

  • host:port — PostgreSQL 服务器地址。
  • database — 远程数据库名称。
  • table — 远程表名称。
  • user — PostgreSQL 用户。
  • 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 采样约束在 ClickHouse 侧仅在查询到 PostgreSQL 完成后执行。

在 PostgreSQL 侧,INSERT 查询以 COPY "table_name" (field1, field2, ... fieldN) FROM STDIN 形式在 PostgreSQL 事务中运行,并在每个 INSERT 语句后自动提交。

PostgreSQL 数组类型转换为 ClickHouse 数组。

备注

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

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

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

示例

PostgreSQL 中的表:

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

或使用 命名集合

插入:

使用非默认模式:

另见

使用 PeerDB 复制或迁移 Postgres 数据

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