pg_clickhouse

从PostgreSQL中查询ClickHouse的接口

概览

扩展包名版本分类许可证语言
pg_clickhouse0.3.0OLAPApache-2.0C++
ID扩展名BinLibLoadCreateTrustReloc模式
2460pg_clickhouse-
相关扩展pg_duckdb duckdb_fdw citus columnar citus_columnar clickhouse_fdw postgres_fdw dblink

release 0.3.0; SQL v0.3

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.3.01817161514pg_clickhouse-
RPMPIGSTY0.3.01817161514pg_clickhouse_$v-
DEBPIGSTY0.3.01817161514postgresql-$v-clickhouse-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u22.x86_64
PIGSTY 0.3.0
u22.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u24.x86_64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u24.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u26.x86_64
u26.aarch64

构建

您可以使用 pig build 命令构建 pg_clickhouse 扩展的 RPM / DEB 包:

pig build pkg pg_clickhouse         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_clickhouse 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

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:必填,binaryhttp
  • host
  • port
  • dbname
  • fetch_size:HTTP streaming batch size;0 表示禁用 streaming

用户映射选项:

  • user
  • password

常见操作

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 中加双引号,查询时也必须带引号。

查询和写入说明

SELECTEXPLAIN、prepared statements、INSERTCOPY 可用于 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 version 0.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 映射到 PostgreSQL jsonbjson;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;轻量 DELETEUPDATE 支持仍在 roadmap 中。
  • 完整示例请参考官方 tutorial,其中会创建 ClickHouse taxi 数据库,通过 IMPORT FOREIGN SCHEMA 导入,并查询生成的 foreign tables。

最后修改 2026-05-18: routine extension update (ac43610)