ClickHouse/docs/ja/integrations/data-ingestion/dbms/postgresql/index.md
2024-11-18 11:58:58 +09:00

14 KiB
Raw Blame History

slug title keywords
/ja/integrations/postgresql PostgreSQLへの接続
clickhouse
postgres
postgresql
connect
integrate
table
engine

import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge';

ClickHouseからPostgreSQLへの接続

このページでは、PostgreSQLとClickHouseを統合するための次のオプションを取り上げます

  • セルフマネージドのClickHouseとClickHouse Cloudの両方に対して、PostgreSQLデータベースをレプリケーションするための特定のCDCツールであるPeerDB by ClickHouseを使用する。
  • PostgreSQLテーブルを読み取るためのPostgreSQLテーブルエンジンを使用する。
  • PostgreSQLのデータベースをClickHouseのデータベースと同期するためのエクスペリメンタルなMaterializedPostgreSQLデータベースエンジンを使用する。

PeerDB by ClickHouseを使用する

PeerDBはClickHouseと協力し、最速のPostgres CDCを提供しています始めるには、PeerDB Cloud でアカウントを作成し、セットアップ手順についてはドキュメントを参照してください。

PostgreSQLテーブルエンジンを使用する

PostgreSQLテーブルエンジンを使用すると、ClickHouseからリモートのPostgreSQLサーバー上のデータに対してSELECTおよびINSERT操作を行うことができます。 この記事では、1つのテーブルを使った基本的な統合方法を説明します。

1. PostgreSQLのセットアップ

  1. postgresql.confで、PostgreSQLがネットワークインターフェースをリッスンするようにするため、次のエントリを追加します
listen_addresses = '*'
  1. ClickHouseから接続するためのユーザーを作成します。デモ用に、フルのスーパーユーザー権限を付与します。
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';
  1. PostgreSQLで新しいデータベースを作成します
CREATE DATABASE db_in_psg;
  1. 新しいテーブルを作成します:
CREATE TABLE table1 (
    id         integer primary key,
    column1    varchar(10)
);
  1. テストのためにいくつかの行を追加します:
INSERT INTO table1
  (id, column1)
VALUES
  (1, 'abc'),
  (2, 'def');
  1. 新しいユーザーを使用してのレプリケーションで、新しいデータベースへの接続を許可するようにPostgreSQLを設定するため、pg_hba.confファイルに次のエントリを追加します。PostgreSQLサーバーのサブネットかIPアドレスでアドレス行を更新します
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    db_in_psg             clickhouse_user 192.168.1.0/24          password
  1. pg_hba.conf設定をリロードします(バージョンに応じてコマンドを調整してください):
/usr/pgsql-12/bin/pg_ctl reload
  1. 新しいclickhouse_userがログインできることを確認します:
psql -U clickhouse_user -W -d db_in_psg -h <your_postgresql_host>

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

2. ClickHouseでのテーブル定義

  1. clickhouse-clientにログインします:
clickhouse-client --user default --password ClickHouse123!
  1. 新しいデータベースを作成します:
CREATE DATABASE db_in_ch;
  1. PostgreSQLを使用するテーブルを作成します:
CREATE TABLE db_in_ch.table1
(
    id UInt64,
    column1 String
)
ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'clickhouse_user', 'ClickHouse_123');

必要最小限のパラメータは次の通りです:

parameter 説明
host:port ホスト名またはIPとポート postgres-host.domain.com:5432
database PostgreSQLデータベース名 db_in_psg
user Postgresへの接続用のユーザー名 clickhouse_user
password Postgresへの接続用のパスワード ClickHouse_123

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

3 統合のテスト

  1. ClickHouseで最初の行を表示します
SELECT * FROM db_in_ch.table1

ClickHouseのテーブルは、既に存在するPostgreSQLのテーブル内の2つの行で自動的に埋められるはずです

Query id: 34193d31-fe21-44ac-a182-36aaefbd78bf

┌─id─┬─column1─┐
│  1 │ abc     │
│  2 │ def     │
└────┴─────────┘
  1. PostgreSQLに戻り、テーブルにいくつかの行を追加します
INSERT INTO table1
  (id, column1)
VALUES
  (3, 'ghi'),
  (4, 'jkl');
  1. これらの新しい行がClickHouseのテーブルに表示されるはずです
SELECT * FROM db_in_ch.table1

応答は次のようになります:

Query id: 86fa2c62-d320-4e47-b564-47ebf3d5d27b

┌─id─┬─column1─┐
│  1 │ abc     │
│  2 │ def     │
│  3 │ ghi     │
│  4 │ jkl     │
└────┴─────────┘
  1. ClickHouseテーブルに行を追加するとどうなるか見てみましょう
INSERT INTO db_in_ch.table1
  (id, column1)
VALUES
  (5, 'mno'),
  (6, 'pqr');
  1. ClickHouseで追加された行がPostgreSQLのテーブルに表示されるはずです
db_in_psg=# SELECT * FROM table1;
id | column1
----+---------
  1 | abc
  2 | def
  3 | ghi
  4 | jkl
  5 | mno
  6 | pqr
(6 rows)

この例では、PostgreSQLテーブルエンジンを使用したPostgreSQLとClickHouseの基本的な統合を示しました。 スキーマの指定、特定のカラムのみを返す、複数のレプリカへの接続などの機能については、PostgreSQLテーブルエンジンのドキュメントページを参照してください。また、ClickHouseと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で

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

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

listen_addresses = '*'
max_replication_slots = 10
wal_level = logical

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

  1. 管理者アカウントを使用して、ClickHouseから接続するためのユーザーを作成します
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';

*デモンストレーションのために、完全なスーパーユーザー権限が与えられています。

  1. 新しいデータベースを作成します:
CREATE DATABASE db1;
  1. psqlで新しいデータベースに接続します:
\connect db1
  1. 新しいテーブルを作成します:
CREATE TABLE table1 (
    id         integer primary key,
    column1    varchar(10)
);
  1. 初期行を追加します:
INSERT INTO table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def');
  1. 新しいユーザーを使用してのレプリケーションで、PostgreSQLを新しいデータベースへの接続を許可するように設定します。 以下は、pg_hba.confファイルに追加する最小エントリです:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    db1             clickhouse_user 192.168.1.0/24          password

*デモンストレーションのために、クリアテキストパスワード認証メソッドを使用しています。PostgreSQLドキュメントに従ってアドレス行をサーバーのサブネットまたはアドレスで更新します

  1. pg_hba.conf設定を次のようにリロードします(バージョンに応じて調整してください):
/usr/pgsql-12/bin/pg_ctl reload
  1. 新しいclickhouse_userでログインをテストします:
 psql -U clickhouse_user -W -d db1 -h <your_postgresql_host>

2. ClickHouseで

  1. ClickHouse CLIにログインします
clickhouse-client --user default --password ClickHouse123!
  1. データベースエンジンのPosgreSQLエクスペリメンタル機能を有効にします
SET allow_experimental_database_materialized_postgresql=1
  1. レプリケーションされる新しいデータベースを作成し、初期テーブルを定義します:
CREATE DATABASE db1_postgres
ENGINE = MaterializedPostgreSQL('postgres-host.domain.com:5432', 'db1', 'clickhouse_user', 'ClickHouse_123')
SETTINGS materialized_postgresql_tables_list = 'table1';

最小オプション:

parameter 説明
host:port ホスト名またはIPとポート postgres-host.domain.com:5432
database PostgreSQLデータベース名 db1
user Postgresへの接続用のユーザー名 clickhouse_user
password Postgresへの接続用のパスワード ClickHouse_123
settings エンジンの追加設定 materialized_postgresql_tables_list = 'table1'

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

  1. 初期テーブルにデータがあるか確認します:
ch_env_2 :) select * from db1_postgres.table1;

SELECT *
FROM db1_postgres.table1

Query id: df2381ac-4e30-4535-b22e-8be3894aaafc

┌─id─┬─column1─┐
  1  abc     
└────┴─────────┘
┌─id─┬─column1─┐
  2  def     
└────┴─────────┘

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

  1. PostgreSQLで、新しい行を追加します
INSERT INTO table1
(id, column1)
VALUES
(3, 'ghi'),
(4, 'jkl');
  1. ClickHouseで、新しい行が表示されることを確認します
ch_env_2 :) select * from db1_postgres.table1;

SELECT *
FROM db1_postgres.table1

Query id: b0729816-3917-44d3-8d1a-fed912fb59ce

┌─id─┬─column1─┐
  1  abc     
└────┴─────────┘
┌─id─┬─column1─┐
  4  jkl     
└────┴─────────┘
┌─id─┬─column1─┐
  3  ghi     
└────┴─────────┘
┌─id─┬─column1─┐
  2  def     
└────┴─────────┘

4. まとめ

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

:::info 高度なオプションで利用可能な機能の詳細については、リファレンスドキュメントを参照してください:https://clickhouse.com/docs/ja/engines/database-engines/materialized-postgresql/ :::

関連コンテンツ