PostgreSQL
データモデリングや同等の概念に関するアドバイスを含む、PostgreSQL から ClickHouse への包括的な移行ガイドは こちらで確認できます。以下では、ClickHouse と PostgreSQL を接続する方法を説明します。
ClickHouse と PostgreSQL の接続
このページでは、PostgreSQL と ClickHouse を統合するための次のオプションについて説明します。
- PostgreSQL のテーブルから読み取るための
PostgreSQLテーブルエンジンの利用 - PostgreSQL 内のデータベースと ClickHouse 内のデータベースを同期するための、実験的な
MaterializedPostgreSQLデータベースエンジンの利用
ClickPipes は、PeerDB を基盤とした ClickHouse Cloud 向けのマネージド連携サービスであり、こちらの利用を推奨します。 また、代替手段として PeerDB は、セルフホスト型の ClickHouse および ClickHouse Cloud 双方への PostgreSQL データベースレプリケーション向けに特化して設計された、オープンソースの CDC(変更データキャプチャ)ツールとして利用できます。
PostgreSQL テーブルエンジンの使用
PostgreSQL テーブルエンジンを使用すると、リモートの PostgreSQL サーバー上に保存されているデータに対して、ClickHouse から SELECT および INSERT 操作を行うことができます。
この記事では、1 つのテーブルを使った基本的な連携方法を説明します。
1. PostgreSQL のセットアップ
postgresql.confで、PostgreSQL がネットワークインターフェイスで待ち受けできるようにするため、次の設定を追加します。
- ClickHouse から接続するためのユーザーを作成します。デモンストレーション目的のため、この例ではスーパーユーザー権限をすべて付与します。
- PostgreSQL で新しいデータベースを作成する:
- 新しいテーブルを作成します:
- テスト用にいくつか行を追加しましょう。
- レプリケーション用の新しいユーザーが新しいデータベースに接続できるように PostgreSQL を構成するには、
pg_hba.confファイルに次のエントリを追加します。address行のアドレスを、PostgreSQL サーバーのサブネットまたは IP アドレスに更新してください。
pg_hba.conf設定ファイルを再読み込みします(利用しているバージョンに応じてこのコマンドを調整してください):
- 新しい
clickhouse_userがログインできることを確認します。
ClickHouse Cloud 上でこの機能を利用している場合、ClickHouse Cloud の IP アドレスから PostgreSQL インスタンスへのアクセスを許可する必要がある場合があります。 外向きトラフィックの詳細については、ClickHouse の Cloud Endpoints API を確認してください。
2. ClickHouse にテーブルを定義する
clickhouse-clientにログインします:
- 新しいデータベースを作成します。
PostgreSQLを使用するテーブルを作成します:
必要となる最小限のパラメータは次のとおりです:
| parameter | Description | example |
|---|---|---|
| host:port | hostname or IP and port | postgres-host.domain.com:5432 |
| database | PostgreSQL database name | db_in_psg |
| user | username to connect to postgres | clickhouse_user |
| password | password to connect to postgres | ClickHouse_123 |
利用可能なパラメータの完全な一覧については、PostgreSQL table engine のドキュメントページを参照してください。
3 統合をテストする
- ClickHouse で初期の行を表示します:
ClickHouse のテーブルには、PostgreSQL のテーブル内に既に存在していた 2 行が自動的に格納されているはずです。
- PostgreSQL に戻り、テーブルにいくつか行を追加します:
- その 2 つの新しい行が ClickHouse のテーブルに表示されているはずです。
レスポンスは次のとおりです。
- ClickHouse テーブルに行を追加したときにどうなるか確認してみましょう。
- ClickHouse に追加された行が PostgreSQL のテーブルに表示されているはずです。
この例では、PostrgeSQL テーブルエンジンを使用して、PostgreSQL と ClickHouse の間の基本的な連携方法を示しました。
スキーマの指定、特定のカラムのみを返す設定、複数レプリカへの接続など、さらに多くの機能については、PostgreSQL テーブルエンジンのドキュメントページ を参照してください。また、ブログ記事 ClickHouse and PostgreSQL - a match made in data heaven - part 1 もあわせてご覧ください。
MaterializedPostgreSQL データベースエンジンの使用
PostgreSQL データベースエンジンは、PostgreSQL のレプリケーション機能を使用して、すべてまたは一部のスキーマやテーブルを含むデータベースのレプリカを作成します。 この記事では、1 つのデータベース、1 つのスキーマ、1 つのテーブルを用いた基本的な統合方法を説明します。
以下の手順では、PostgreSQL CLI (psql) と ClickHouse CLI (clickhouse-client) を使用します。PostgreSQL サーバーは Linux 上にインストールされています。以下の内容は、PostgreSQL データベースを新規にテストインストールした場合の最小設定です。
1. PostgreSQL 側の設定
postgresql.confで、最低限の listen 設定、レプリケーション用のwal_level、レプリケーションスロットを設定します:
次の設定項目を追加します:
*ClickHouse には、WAL レベルとして logical 以上と、少なくとも 2 個のレプリケーションスロットが必要です
- 管理者アカウントで、ClickHouse から接続するためのユーザーを作成します。
*デモ目的のために、完全なスーパーユーザー権限が付与されています。
- 新しいデータベースを作成します:
psqlで新しいデータベースに接続します:
- 新しいテーブルを作成します:
- 初期データ行を追加します:
- レプリケーション用に、新しいユーザーが新しいデータベースへ接続できるよう PostgreSQL を設定します。以下は
pg_hba.confファイルに追加する最小限のエントリです。
*デモ用として、ここではプレーンテキストのパスワード認証方式を使用しています。PostgreSQL のドキュメントに従い、アドレス行をサブネットまたはサーバーのアドレスに更新してください
pg_hba.conf設定を次のようなコマンドで再読み込みします(お使いのバージョンに合わせて調整してください):
- 新しい
clickhouse_userでログインできるかテストします。
2. ClickHouse で
- ClickHouse CLI にログインする
- データベースエンジン用の PostgreSQL 実験的機能を有効にします:
- レプリケーション用の新しいデータベースを作成し、初期テーブルを定義します:
最小限のオプション:
| parameter | Description | example |
|---|---|---|
| host:port | ホスト名または IP アドレスとポート | postgres-host.domain.com:5432 |
| database | PostgreSQL のデータベース名 | db1 |
| user | PostgreSQL に接続するためのユーザー名 | clickhouse_user |
| password | PostgreSQL に接続するためのパスワード | ClickHouse_123 |
| settings | エンジン向けの追加設定 | materialized_postgresql_tables_list = 'table1' |
PostgreSQL データベースエンジンの詳細なガイドについては、https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings を参照してください。
- 初期テーブルにデータが入っていることを確認します:
3. 基本的なレプリケーションをテストする
- PostgreSQL に新しい行を追加します:
- ClickHouse で新しい行が表示されていることを確認します。
4. まとめ
このインテグレーションガイドでは、テーブルを含むデータベースをレプリケートするためのシンプルな例を扱いましたが、データベース全体をレプリケートしたり、既存のレプリケーションに新しいテーブルやスキーマを追加したりするなど、より高度なオプションも存在します。このレプリケーションでは DDL コマンドはサポートされませんが、エンジンを設定することで変更を検出し、スキーマ変更などの構造的な変更が行われた際にテーブルを再読み込みさせることができます。
高度なオプションで利用可能な機能の詳細については、リファレンスドキュメントを参照してください。