pg_clickhouse リファレンスドキュメント
はじめに
オープンソースの PostgreSQL 拡張機能である [pg_clickhouse] は、SQL を書き換えることなく、 PostgreSQL から直接 ClickHouse 上で分析クエリを実行できます。PostgreSQL 13 以降と ClickHouse v23 以降をサポートしています。
ClickPipes によるデータの ClickHouse への同期が始まったら、 pg_clickhouse を使って PostgreSQL のスキーマに[外部テーブルをインポート]できます。 その後は、それらのテーブルに対して既存の PostgreSQL クエリをそのまま実行できるため、 既存のコードベースを維持したまま、実行処理を ClickHouse にオフロードできます。
はじめに
pg_clickhouse を試す最も簡単な方法は、Docker image を使用することです。これには、 pg_clickhouse と re2 の拡張機能が含まれた標準の PostgreSQL Docker イメージが含まれています。
ClickHouseテーブルのインポートやクエリのプッシュダウンを始めるには、 tutorialを参照してください。
テストケース: TPC-H
この表は、通常の PostgreSQL テーブルと、ClickHouse に接続した pg_clickhouse における TPC-H クエリの性能を比較したものです。いずれもスケーリングファクター 1 でデータをロードしています。✔︎ は完全なプッシュダウンを示し、ダッシュは 1 分後にクエリがキャンセルされたことを示します。すべてのテストは、36 GB メモリ搭載の MacBook Pro M4 Max 上で実行しています。
| クエリ | PostgreSQL | pg_clickhouse | プッシュダウン |
|---|---|---|---|
| [Query 1] | 4693 ms | 268 ms | ✔︎ |
| [Query 2] | 458 ms | 3446 ms | |
| [Query 3] | 742 ms | 111 ms | ✔︎ |
| [Query 4] | 270 ms | 130 ms | ✔︎ |
| [Query 5] | 337 ms | 1460 ms | ✔︎ |
| [Query 6] | 764 ms | 53 ms | ✔︎ |
| [Query 7] | 619 ms | 96 ms | ✔︎ |
| [Query 8] | 342 ms | 156 ms | ✔︎ |
| [Query 9] | 3094 ms | 298 ms | ✔︎ |
| [Query 10] | 581 ms | 197 ms | ✔︎ |
| [Query 11] | 212 ms | 24 ms | |
| [Query 12] | 1116 ms | 84 ms | ✔︎ |
| [Query 13] | 958 ms | 1368 ms | |
| [Query 14] | 181 ms | 73 ms | ✔︎ |
| [Query 15] | 1118 ms | 557 ms | |
| [Query 16] | 497 ms | 1714 ms | |
| [Query 17] | 1846 ms | 32709 ms | |
| [Query 18] | 5823 ms | 10649 ms | |
| [Query 19] | 53 ms | 206 ms | ✔︎ |
| [Query 20] | 421 ms | - | |
| [Query 21] | 1349 ms | 4434 ms | |
| [Query 22] | 258 ms | 1415 ms |
ソースコードからコンパイル
一般的な Unix
PostgreSQL と curl の開発パッケージには pg_config と
curl-config がパスに含まれているため、通常は make (または
gmake) を実行し、続けて make install を実行した後、データベースで
CREATE EXTENSION pg_clickhouse を実行するだけで済みます。
Debian / Ubuntu / APT
PostgreSQL Apt リポジトリから取得する方法の詳細は、PostgreSQL Apt を参照してください。
RedHat / CentOS / Yum
PostgreSQL Yum リポジトリから取得する方法の詳細は、PostgreSQL Yum を参照してください。
PGXN からインストール
上記の依存関係を満たしたら、PGXN client (Homebrew、Apt、および pgxnclient という名前の Yum パッケージとして提供) を使用して、pg_clickhouse をダウンロード、コンパイル、インストールします。
コンパイルとインストール
ClickHouseライブラリとpg_clickhouseをビルドしてインストールするには、以下を実行します。
ホストに PostgreSQL が複数インストールされている場合は、適切なバージョンの pg_config を指定する必要があることがあります。
ホストで curl-config がパスに含まれていない場合は、パスを
明示的に指定できます:
次のようなエラーが発生した場合:
GNU make を使用する必要があります。システムでは
gmake としてインストールされている場合があります。
次のようなエラーが表示された場合:
pg_config がインストールされ、パスが通っていることを確認してください。PostgreSQL を RPM などの
パッケージ管理システムでインストールした場合は、
-devel パッケージもインストールされていることを確認してください。必要に応じて、
ビルド時にその場所を指定してください:
PostgreSQL 18 以降で拡張機能をカスタムプレフィックスにインストールするには、
install に prefix 引数を渡します (ほかの make ターゲットには渡しません) :
次に、以下の[postgresql.conf
パラメータ]にプレフィックスが含まれていることを確認してください。
テスト
テストスイートを実行するには、拡張機能のインストール後に、次を実行します
次のようなエラーが発生した場合:
テストスイートは、デフォルトの "postgres" スーパーユーザーなどのスーパーユーザーで実行する必要があります:
読み込み
pg_clickhouse をインストールしたら、スーパーユーザーとして接続し、次を実行してデータベースに追加します。
pg_clickhouse とその関連オブジェクトをすべて特定のスキーマに
インストールする場合は、SCHEMA 句を使用してスキーマを指定します。次のように指定します。
依存関係
pg_clickhouse 拡張機能を使用するには、PostgreSQL 13 以降、libcurl、
libuuid が必要です。拡張機能のビルドには、C/C++ コンパイラ、libSSL、GNU
make、CMake が必要です。
ロードマップ
現在の最優先事項は、DML 機能を追加する前に、分析ワークロード向けのプッシュダウン対応を完了させることです。ロードマップは次のとおりです。
- 残り 10 件の未プッシュダウンの TPC-H クエリについて、最適な実行計画を立てられるようにする
- ClickBench クエリに対するプッシュダウンをテストし、修正する
- PostgreSQL のすべての集約関数の透過的なプッシュダウンをサポートする
- PostgreSQL のすべての関数の透過的なプッシュダウンをサポートする
- CREATE SERVER と GUCs により、サーバーレベルおよびセッションレベルの ClickHouse 設定を可能にする
- すべての ClickHouse データ型をサポートする
- 論理削除と UPDATE をサポートする
- COPY による一括挿入をサポートする
- 任意の ClickHouse クエリを実行し、その 結果をテーブルとして返す関数を追加する
- すべてのクエリの対象がリモート データベースである場合の UNION クエリのプッシュダウンをサポートする
著者
著作権
- Copyright (c) 2025-2026, ClickHouse
- 一部 Copyright (c) 2023-2025, Ildus Kurbangaliev
- 一部 Copyright (c) 2019-2023, Adjust GmbH
- 一部 Copyright (c) 2012-2019, PostgreSQL Global Development Group
[クエリ 1] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/1.sql [クエリ 2] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/2.sql [クエリ 3] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/3.sql [クエリ 4] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/4.sql [クエリ 5] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/5.sql [クエリ 6] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/6.sql [クエリ 7] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/7.sql [クエリ 8] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/8.sql [クエリ 9] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/9.sql [クエリ 10] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/10.sql [クエリ 11] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/11.sql [クエリ 12] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/12.sql [クエリ 13] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/13.sql [クエリ 14] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/14.sql [クエリ 15] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/15.sql [クエリ 16] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/16.sql [クエリ 17] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/17.sql [クエリ 18] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/18.sql [クエリ 19] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/19.sql [クエリ 20] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/20.sql [クエリ 21] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/21.sql [クエリ 22] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/22.sql