pg_clickhouse

从PostgreSQL中查询ClickHouse的接口

概览

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

release 0.2.0; SQL v0.2

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.2.01817161514pg_clickhouse-
RPMPIGSTY0.2.01817161514pg_clickhouse_$v-
DEBPIGSTY0.2.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.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
u22.x86_64
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
u22.aarch64
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
u24.x86_64
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
u24.aarch64
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.0
PIGSTY 0.2.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;

用法

来源:READMEreferencetutorialv0.2.0 release notes

pg_clickhouse 通过 clickhouse_fdw foreign data wrapper 在 PostgreSQL 中直接执行 ClickHouse 分析查询。上游文档说明它支持 PostgreSQL 13+ 与 ClickHouse 23+。

将 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;

上游记录的 server 选项包括:

  • driver:必填,取值为 binaryhttp
  • host
  • port
  • dbname
  • fetch_size:HTTP 流式批大小,0 表示禁用流式

user mapping 选项包括:

  • user
  • password

常见操作

ALTER EXTENSION pg_clickhouse UPDATE;
ALTER EXTENSION pg_clickhouse UPDATE TO '0.2';
DROP SERVER taxi_srv CASCADE;

IMPORT FOREIGN SCHEMA 还支持 LIMIT TO (...)EXCEPT (...)。参考文档特别提醒:导入的 mixed-case 标识符会在 PostgreSQL 中带双引号,查询时也必须显式加引号。

版本与下推说明

  • 参考文档区分库版本和扩展版本;pgch_version() 是在 v0.2.0 中加入的。
  • 仅补丁级别的发布可能只更新库文件,不需要执行 ALTER EXTENSION
  • v0.2.0 增加了数组、正则函数、split_part()、数组运算符与当前日期/时间表达式的更多下推能力,以及 pg_clickhouse.pushdown_regex 设置。

注意事项

  • 上游将它定位为分析优先的扩展,路线图里更广泛的 DML 支持仍属于后续工作。
  • 若需要完整示例,应按官方 tutorial 创建 ClickHouse taxi 数据库,通过 IMPORT FOREIGN SCHEMA 导入,再查询生成的 foreign tables。

最后修改 2026-05-01: update extension data (e399d22)