postgresql 表函数
允许对存储在远程 PostgreSQL 服务器上的数据执行 SELECT
和 INSERT
查询。
语法
参数
host:port
— PostgreSQL 服务器地址。database
— 远程数据库名称。table
— 远程表名称。user
— PostgreSQL 用户。password
— 用户密码。schema
— 非默认表模式。可选。on_conflict
— 冲突解决策略。示例:ON CONFLICT DO NOTHING
。可选。
参数也可以使用 命名集合 传递。在这种情况下,host
和 port
应单独指定。此方法建议用于生产环境。
返回值
一个具有与原 PostgreSQL 表相同列的表对象。
在 INSERT
查询中,为了区分表函数 postgresql(...)
与列名列表的表名,您必须使用关键字 FUNCTION
或 TABLE 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 的工具。