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
采样约束仅在查询到 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 的工具。