はじめに
オープンソースの 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 image が含まれています。
docker run --name pg_clickhouse -e POSTGRES_PASSWORD=my_pass \
-d ghcr.io/clickhouse/pg_clickhouse:19
docker exec -it pg_clickhouse psql -U postgres -c 'CREATE EXTENSION pg_clickhouse'ClickHouseテーブルのインポートとクエリのプッシュダウンを始めるには、 tutorialを参照してください。
テストケース: TPC-H
この表は、通常の PostgreSQL テーブルと ClickHouse に接続した pg_clickhouse について、スケーリング係数 1 でデータをロードした場合の TPC-H クエリパフォーマンスを比較したものです。✔︎ は単一の foreign scan として完全にプッシュダウンされることを、✼ は複数の foreign scan として完全にプッシュダウンされることを示します。すべてのテストは、メモリ 36 GB を搭載した MacBook Pro M4 Max で実行しました。
| クエリ | PostgreSQL | pg_clickhouse | Pushdown |
|---|---|---|---|
| [クエリ 1] | 4483 ms | 59 ms | ✔ |
| [クエリ 2] | 588 ms | 24 ms | ✔ |
| [クエリ 3] | 786 ms | 62 ms | ✔ |
| [クエリ 4] | 550 ms | 38 ms | ✔ |
| [クエリ 5] | 721 ms | 1439 ms | ✔ |
| [クエリ 6] | 592 ms | 17 ms | ✔ |
| [クエリ 7] | 639 ms | 29 ms | ✔ |
| [クエリ 8] | 398 ms | 383 ms | ✔ |
| [クエリ 9] | 2842 ms | 162 ms | ✔ |
| [クエリ 10] | 860 ms | 125 ms | ✔ |
| [クエリ 11] | 276 ms | 21 ms | ✼ |
| [クエリ 12] | 963 ms | 26 ms | ✔ |
| [クエリ 13] | 1037 ms | 1354 ms | |
| [クエリ 14] | 675 ms | 30 ms | ✔ |
| [クエリ 15] | 2520 ms | 387 ms | |
| [クエリ 16] | 539 ms | 823 ms | |
| [クエリ 17] | 2107 ms | 37 ms | ✔ |
| [クエリ 18] | 5230 ms | 7228 ms | |
| [クエリ 19] | 68 ms | 47 ms | ✔ |
| [クエリ 20] | 473 ms | 28 ms | |
| [クエリ 21] | 1145 ms | 4470 ms | |
| [クエリ 22] | 270 ms | 45 ms | ✼ |
ソースからコンパイル
General Unix
PostgreSQL と curl の開発パッケージでは、pg_config と
curl-config が PATH に含まれるため、make (または
gmake) を実行し、続けて make install を実行すれば、
データベースで
CREATE EXTENSION pg_clickhouse を実行できるはずです。
Debian / Ubuntu / APT
PostgreSQL Apt リポジトリからの取得方法の詳細は、PostgreSQL Aptを参照してください。
sudo apt install \
postgresql-server-19 \
libcurl4-openssl-dev \
uuid-dev \
libssl-dev \
make \
cmake \
g++RedHat / CentOS / Yum
sudo yum install \
postgresql-server \
libcurl-devel \
libuuid-devel \
openssl-libs \
automake \
cmake \
gccPostgreSQL Yum リポジトリからパッケージを取得する方法の詳細は、PostgreSQL Yum を参照してください。
PGXN からインストール
上記の依存関係を満たしたら、PGXN client (Homebrew、Apt、および pgxnclient という名前の Yum パッケージで提供) を使用して、pg_clickhouse をダウンロード、コンパイル、インストールします:
pgxn install pg_clickhouseコンパイルとインストール
ClickHouseライブラリとpg_clickhouseをビルドしてインストールするには、以下を実行します。
make
sudo make installホストに複数の PostgreSQL がインストールされている場合は、適切なバージョンの pg_config を
指定する必要がある場合があります:
export PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config
make
sudo make installホストで curl-config がパスに含まれていない場合は、パスを明示的に指定できます:
export CURL_CONFIG=/opt/homebrew/opt/curl/bin/curl-config
make
sudo make install次のようなエラーが発生した場合:
"Makefile", line 8: Need an operatorGNU make を使用する必要があります。システムによっては、
gmake としてインストールされている場合があります:
gmake
gmake install
gmake installcheck次のようなエラーが発生した場合:
make: pg_config: Command not foundpg_config がインストールされており、パスが通っていることを確認してください。RPM などの
パッケージ管理システムを使って PostgreSQL をインストールした場合は、
-devel パッケージもインストールされていることを確認してください。必要に応じて、
ビルドプロセスにその場所を指定してください:
export PG_CONFIG=/path/to/pg_config
make
sudo make installPostgreSQL 18 以降で拡張機能をカスタムのプレフィックスにインストールするには、
install に prefix 引数を渡します (ほかの make ターゲットには渡しません) :
sudo make install prefix=/usr/local/extras次に、以下の[postgresql.conf
パラメータ]にプレフィックスが含まれていることを確認します。
extension_control_path = '/usr/local/extras/postgresql/share:$system'
dynamic_library_path = '/usr/local/extras/postgresql/lib:$libdir'テスト
テストスイートを実行するには、拡張機能のインストール後に次を実行します
make installcheck次のようなエラーが表示された場合:
ERROR: must be owner of database regressionテストスイートは、デフォルトの "postgres" スーパーユーザーなどのスーパーユーザーを使用して実行する必要があります:
make installcheck PGUSER=postgres読み込み
pg_clickhouse をインストールしたら、スーパーユーザーとして接続し、次を実行することで
データベースに追加できます:
CREATE EXTENSION pg_clickhouse;pg_clickhouse と、それに関連するすべてのオブジェクトを特定の
スキーマにインストールする場合は、SCHEMA 句を使用してスキーマを指定します。以下のように指定します。
CREATE SCHEMA env;
CREATE EXTENSION pg_clickhouse SCHEMA env;依存関係
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