Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

MaterializedPostgreSQL テーブルエンジン

実験的な機能
ClickHouse Cloud ではサポートされていません

PostgreSQL テーブルの初期データダンプを基に ClickHouse テーブルを作成し、レプリケーションプロセスを開始します。つまり、リモート PostgreSQL データベース内の PostgreSQL テーブルで新しい変更が発生すると、それを適用するバックグラウンドジョブを実行します。

複数のテーブルが必要な場合は、テーブルエンジンではなく MaterializedPostgreSQL データベースエンジンを使用し、レプリケートするテーブルを指定する materialized_postgresql_tables_list 設定を使用することを強く推奨します (今後はデータベース schema の追加も可能になる予定です) 。その方が、CPU 使用量、接続数、リモート PostgreSQL データベース内のレプリケーションスロット数の面で大幅に効率的です。

テーブルの作成

CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password')
PRIMARY KEY key;

エンジンパラメータ

  • host:port — PostgreSQLサーバーのアドレス。
  • database — リモートデータベース名。
  • table — リモートテーブル名。
  • user — PostgreSQLユーザー。
  • password — ユーザーのパスワード。

TLS/SSL

TLS/SSL パラメータは libpq に渡され、named collection を通じて、またはエンジンの末尾にキー・バリュー引数として指定できます。指定できるのは sslmode (disableallowpreferrequireverify-caverify-full。未設定の場合は libpq のデフォルトである prefer が適用されます) と、2 種類の形式で指定できる証明書および秘密鍵です。sslrootcert (CA 証明書) 、sslcert (クライアント証明書) 、sslkey (クライアント秘密鍵) はサーバーローカルのファイルへのパスであり、サーバー設定ファイルで定義された named collection からのみ受け付けられます。一方、sslrootcert_pemsslcert_pemsslkey_pem には対応するファイルの内容をリテラルとして指定でき、SQL からも指定できます。また、パスワードと同様にログおよび SHOW クエリではマスクされます。

CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password',
                                sslmode = 'verify-full', sslrootcert_pem = '-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----')
PRIMARY KEY key;

TLS/SSL パラメータは PostgreSQL の接続パラメータに含まれ、テーブルの作成時に固定されます。

要件

  1. PostgreSQL の設定ファイルで、wal_level の値を logical に設定し、max_replication_slots パラメータの値を少なくとも 2 に設定する必要があります。

  2. MaterializedPostgreSQL エンジンを使用するテーブルには、PostgreSQL テーブルの replica identity index (デフォルトでは主キー) と同じ主キーが必要です (replica identity index の詳細を参照) 。

  3. 使用できるのは Atomic データベースのみです。

  4. MaterializedPostgreSQL テーブルエンジンは、実装上 PostgreSQL の pg_replication_slot_advance 関数を必要とするため、PostgreSQL バージョン 11 以上でのみ動作します。

仮想カラム

  • _version — トランザクションカウンター。Type: UInt64

  • _sign — 削除マーク。Type: Int8。設定可能な値:

    • 1 — 行は削除されていません。
    • -1 — 行は削除されています。

これらのカラムは、テーブル作成時に追加する必要はありません。SELECT クエリから常に参照できます。 _version カラムは WAL 内の LSN の位置に対応するため、レプリケーションがどの程度最新かを確認する際に使用できます。

CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;

SELECT key, value, _version FROM postgresql_db.postgresql_replica;
Navigation