メインコンテンツまでスキップ
メインコンテンツまでスキップ

ClickHouseとPostgreSQLの接続

このページでは、PostgreSQLとClickHouseを統合するための以下のオプションについて説明します。

  • ClickPipesを使用する、ClickHouse Cloudのための管理された統合サービス - 現在プライベートプレビュー中です。こちらからサインアップしてください。
  • PeerDB by ClickHouseを使用する、セルフホストのClickHouseおよびClickHouse CloudへのPostgreSQLデータベースレプリケーションのために特別に設計されたCDCツール
    • PeerDBは現在ClickHouse Cloudにネイティブに利用可能です - 私たちの新しいClickPipeコネクタを使用した、Blazing-fast PostgresからClickHouseへのCDC - 現在プライベートプレビュー中です。こちらからサインアップしてください。
  • PostgreSQLテーブルエンジンを使用して、PostgreSQLテーブルから読み取る
  • 実験的なMaterializedPostgreSQLデータベースエンジンを使用して、PostgreSQLのデータベースとClickHouseのデータベースを同期する

ClickPipesの使用(PeerDBによって提供)

PeerDBは現在ClickHouse Cloudにネイティブに利用可能です - 私たちの新しいClickPipeコネクタを使用した、Blazing-fast PostgresからClickHouseへのCDC - 現在プライベートプレビュー中です。こちらからサインアップしてください。

PostgreSQLテーブルエンジンの使用

PostgreSQLテーブルエンジンは、ClickHouseからリモートPostgreSQLサーバーに保存されているデータに対してSELECTおよびINSERT操作を許可します。 この記事は、1つのテーブルを使用した統合の基本的な方法を示すことを目的としています。

1. PostgreSQLのセットアップ

  1. postgresql.confに以下のエントリを追加して、PostgreSQLがネットワークインターフェースでリッスンできるようにします。
  1. ClickHouseから接続するためのユーザーを作成します。デモ目的で、この例ではフルスーパーユーザー権限を付与しています。
  1. PostgreSQLに新しいデータベースを作成します:
  1. 新しいテーブルを作成します:
  1. テスト用にいくつかの行を追加しましょう:
  1. レプリケーションのために新しいユーザーで新しいデータベースへの接続を許可するようにPostgreSQLを構成するために、pg_hba.confファイルに以下のエントリを追加します。アドレス行は、PostgreSQLサーバーのサブネットまたはIPアドレスで更新してください:
  1. pg_hba.confの設定を再読み込みします(バージョンに応じてこのコマンドを調整してください):
  1. 新しいclickhouse_userがログインできることを確認します:
注記

ClickHouse Cloudでこの機能を使用している場合、ClickHouse CloudのIPアドレスがPostgreSQLインスタンスにアクセスできるように許可する必要があるかもしれません。 ClickHouseのCloud Endpoints APIでエグレストラフィックの詳細を確認してください。

2. ClickHouseでのテーブルの定義

  1. clickhouse-clientにログインします:
  1. 新しいデータベースを作成しましょう:
  1. PostgreSQLを使用するテーブルを作成します:

必要な最小パラメータは以下です:

parameterDescriptionexample
host:portホスト名またはIPとポートpostgres-host.domain.com:5432
databasePostgreSQLデータベース名db_in_psg
userPostgreSQLに接続するユーザー名clickhouse_user
passwordPostgreSQLに接続するパスワードClickHouse_123
注記

完全なパラメータリストについては、PostgreSQLテーブルエンジンのドキュメントページを参照してください。

3 統合のテスト

  1. ClickHouseで初期行を確認します:

ClickHouseのテーブルは、PostgreSQLのテーブルに既に存在していた2行で自動的にポピュレートされているはずです:

  1. PostgreSQLに戻り、テーブルにいくつかの行を追加します:
  1. これらの2つの新しい行がClickHouseのテーブルに表示されるはずです:

レスポンスは以下のようになります:

  1. ClickHouseテーブルに行を追加するとどうなるか見てみましょう:
  1. ClickHouseで追加した行がPostgreSQLのテーブルに表示されるはずです:

この例は、PostgreSQLとClickHouseの間の基本的な統合を示すもので、PostgreSQLテーブルエンジンを使用しています。 スキーマの指定、カラムのサブセットを返す、複数のレプリカへの接続などの機能については、PostgreSQLテーブルエンジンのドキュメントページをご覧ください。また、ClickHouseとPostgreSQL - データの天国での出会い - パート1ブログもチェックしてください。

MaterializedPostgreSQLデータベースエンジンの使用

Not supported in ClickHouse Cloud
Experimental feature. Learn more.

PostgreSQLデータベースエンジンは、PostgreSQLのレプリケーション機能を使用して、データベースのレプリカを作成します。すべてまたは一部のスキーマとテーブルを伴います。 この記事は、データベース、スキーマ、テーブルを1つ使用した統合の基本的な方法を示すことを目的としています。

以下の手順では、PostgreSQL CLI(psql)とClickHouse CLI(clickhouse-client)が使用されています。PostgreSQLサーバーはlinuxにインストールされています。以下の設定は、PostgreSQLデータベースが新規テストインストールの場合の最小設定です

1. PostgreSQLで

  1. postgresql.confで、最小のリッスンレベル、レプリケーションのwalレベル、レプリケーションスロットを設定します:

次のエントリを追加します:

*ClickHouseは、最小のlogical walレベルと最小の2レプリケーションスロットが必要です

  1. 管理者アカウントを使用して、ClickHouseから接続するユーザーを作成します:

*デモ目的で、フルスーパーユーザー権限が付与されています。

  1. 新しいデータベースを作成します:
  1. psqlで新しいデータベースに接続します:
  1. 新しいテーブルを作成します:
  1. 初期行を追加します:
  1. レプリケーションのために新しいユーザーで新しいデータベースへの接続を許可するようにPostgreSQLを構成します。以下はpg_hba.confファイルに追加する最小限のエントリです:

*デモ目的で、平文パスワード認証メソッドを使用しています。アドレス行は、PostgreSQLのドキュメントに従ってサーバーのサブネットまたはアドレスで更新してください

  1. pg_hba.conf設定を次のように再読み込みします(バージョンに応じて調整してください):
  1. 新しいclickhouse_userでログインをテストします:

2. ClickHouseで

  1. ClickHouse CLIにログインします:
  1. データベースエンジンのためにPostgreSQLの実験的機能を有効にします:
  1. レプリケートする新しいデータベースを作成し、初期テーブルを定義します:

最小オプション:

parameterDescriptionexample
host:portホスト名またはIPとポートpostgres-host.domain.com:5432
databasePostgreSQLデータベース名db1
userPostgreSQLに接続するユーザー名clickhouse_user
passwordPostgreSQLに接続するパスワードClickHouse_123
settingsエンジンの追加設定materialized_postgresql_tables_list = 'table1'
参考

PostgreSQLデータベースエンジンの完全なガイドについては、https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settingsを参照してください

  1. 初期テーブルにデータがあることを確認します:

3. 基本的なレプリケーションのテスト

  1. PostgreSQLに新しい行を追加します:
  1. ClickHouseで新しい行が表示されることを確認します:

4. まとめ

この統合ガイドは、テーブルを持つデータベースをレプリケートする方法についてのシンプルな例に焦点を当てていますが、全データベースのレプリケーションや既存のレプリケーションに新しいテーブルやスキーマを追加するなど、さらに高度なオプションも存在します。DDLコマンドはこのレプリケーションではサポートされていませんが、エンジンは変更を検出し、構造が変更されたときにテーブルを再読み込みするように設定できます。

参考

高度なオプションで利用できるさらに多くの機能については、リファレンスドキュメントをご覧ください。