メインコンテンツへスキップ
ClickHouse Cloud ユーザーには、PostgreSQL から ClickHouse へのレプリケーションには ClickPipes の使用を推奨します。これは、PostgreSQL 向けの高性能な CDC (変更データキャプチャ) をネイティブにサポートしています。
PostgreSQL テーブルの初期データダンプを基に ClickHouse テーブルを作成し、レプリケーションプロセスを開始します。つまり、リモート PostgreSQL データベース内の PostgreSQL テーブルで新しい変更が発生すると、それを適用するバックグラウンドジョブを実行します。
このテーブルエンジンは実験的機能です。使用するには、設定ファイルで allow_experimental_materialized_postgresql_table を 1 に設定するか、SET コマンドを使用してください。
SET allow_experimental_materialized_postgresql_table=1
複数のテーブルが必要な場合は、テーブルエンジンではなく 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 — ユーザーのパスワード。

要件

  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;
TOAST の値のレプリケーションには対応していません。代わりに、データ型のデフォルト値が使用されます。
最終更新日 2026年6月10日