pg_clickhouse
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_clickhouse | 0.3.0 | OLAP | Apache-2.0 | C++ |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2460 | pg_clickhouse | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | pg_duckdb duckdb_fdw citus columnar citus_columnar clickhouse_fdw postgres_fdw dblink |
|---|
release 0.3.0; SQL v0.3
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.3.0 | 1817161514 | pg_clickhouse | - |
| RPM | PIGSTY | 0.3.0 | 1817161514 | pg_clickhouse_$v | - |
| DEB | PIGSTY | 0.3.0 | 1817161514 | postgresql-$v-clickhouse | - |
构建
您可以使用 pig build 命令构建 pg_clickhouse 扩展的 RPM / DEB 包:
pig build pkg pg_clickhouse # 构建 RPM / DEB 包
安装
您可以直接安装 pg_clickhouse 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_clickhouse; # 当前活跃 PG 版本安装
pig ext install -y pg_clickhouse -v 18 # PG 18
pig ext install -y pg_clickhouse -v 17 # PG 17
pig ext install -y pg_clickhouse -v 16 # PG 16
pig ext install -y pg_clickhouse -v 15 # PG 15
pig ext install -y pg_clickhouse -v 14 # PG 14
dnf install -y pg_clickhouse_18 # PG 18
dnf install -y pg_clickhouse_17 # PG 17
dnf install -y pg_clickhouse_16 # PG 16
dnf install -y pg_clickhouse_15 # PG 15
dnf install -y pg_clickhouse_14 # PG 14
apt install -y postgresql-18-clickhouse # PG 18
apt install -y postgresql-17-clickhouse # PG 17
apt install -y postgresql-16-clickhouse # PG 16
apt install -y postgresql-15-clickhouse # PG 15
apt install -y postgresql-14-clickhouse # PG 14
预加载配置:
shared_preload_libraries = 'pg_clickhouse';
创建扩展:
CREATE EXTENSION pg_clickhouse;
用法
来源:README, reference, tutorial, v0.3.0 release notes, changelog
pg_clickhouse 通过 clickhouse_fdw foreign data wrapper 在 PostgreSQL 中运行 ClickHouse 分析查询。上游文档说明支持 PostgreSQL 13+ 和 ClickHouse 23+;Pigsty 打包版本为 0.3.0,覆盖 PostgreSQL 14-18。
连接 PostgreSQL 与 ClickHouse
CREATE EXTENSION pg_clickhouse;
CREATE SERVER taxi_srv
FOREIGN DATA WRAPPER clickhouse_fdw
OPTIONS (driver 'binary', host 'localhost', dbname 'taxi');
CREATE USER MAPPING FOR CURRENT_USER
SERVER taxi_srv
OPTIONS (user 'default');
CREATE SCHEMA taxi;
IMPORT FOREIGN SCHEMA taxi FROM SERVER taxi_srv INTO taxi;
上游文档中的服务器选项:
driver:必填,binary或httphostportdbnamefetch_size:HTTP streaming batch size;0表示禁用 streaming
用户映射选项:
userpassword
常见操作
ALTER EXTENSION pg_clickhouse UPDATE;
ALTER EXTENSION pg_clickhouse UPDATE TO '0.3';
SELECT pgch_version();
DROP SERVER taxi_srv CASCADE;
IMPORT FOREIGN SCHEMA 也支持 LIMIT TO (...) 和 EXCEPT (...)。reference 提醒:导入的 mixed-case 标识符会在 PostgreSQL 中加双引号,查询时也必须带引号。
查询和写入说明
SELECT、EXPLAIN、prepared statements、INSERT 和 COPY 可用于 pg_clickhouse foreign tables。使用 EXPLAIN (VERBOSE) 查看将发送到 ClickHouse 的远端 SQL。
EXPLAIN (VERBOSE)
SELECT node_id, count(*)
FROM logs
GROUP BY node_id;
INSERT INTO nodes(node_id, name, region, arch, os)
VALUES (9, 'west-node', 'us-west-2', 'amd64', 'Linux');
文档说明可以向 foreign table 执行 COPY,但上游也指出它当前使用 INSERT 语句,因为 FDW batch insertion 仍是未来工作。
版本与下推说明
- reference 记录了独立的 library version 和 extension version;
pgch_version()报告已加载的 library version。 - patch-only release 只更新库,不要求
ALTER EXTENSION。 - release
v0.3.0使用 SQL version0.3;运行ALTER EXTENSION pg_clickhouse UPDATE TO '0.3'可应用其 SQL 层权限变更。 - release
v0.3.0增加了对re2函数、soundex()、双参数levenshtein()、兼容的to_char(timestamp[tz], fmt)、部分内置函数,以及 JSON/JSONB path 操作的下推。 - ClickHouse
JSON映射到 PostgreSQLjsonb或json;binary driver 的JSON映射要求 ClickHouse 24.10 或之后版本。 pg_clickhouse.pushdown_regex控制内置 PostgreSQL regex 下推。上游建议,如果 regex 工作应直接下推,可以考虑re2扩展。
注意事项
- 在 0.3.0 中,
clickhouse_raw_query(text, text)不再允许PUBLIC执行;只授予确实需要 ad-hoc ClickHouse 查询的角色。 - 上游将该扩展定位为 analytics-first;轻量
DELETE和UPDATE支持仍在 roadmap 中。 - 完整示例请参考官方 tutorial,其中会创建 ClickHouse
taxi数据库,通过IMPORT FOREIGN SCHEMA导入,并查询生成的 foreign tables。