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

MaterializedPostgreSQL

Experimental feature. Learn more.
Not supported in ClickHouse Cloud
注記

ClickHouse Cloudのユーザーは、PostgreSQLのレプリケーションのために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. wal_level の設定はlogicalでなければならず、max_replication_slots パラメータはPostgreSQL設定ファイル内で少なくとも2以上でなければなりません。

  2. MaterializedPostgreSQLエンジンを持つテーブルは、PostgreSQLテーブルのレプリカアイデンティティインデックス(デフォルトでは:主キー)と同じ主キーを持たなければなりません(レプリカアイデンティティインデックスの詳細を参照)。

  3. データベースはAtomicのみが許可されています。

  4. MaterializedPostgreSQLテーブルエンジンは、実装がpg_replication_slot_advance PostgreSQL関数を必要とするため、PostgreSQLバージョン>= 11でのみ機能します。

仮想カラム

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

  • _sign — 削除マーク。タイプ:Int8。可能な値:

    • 1 — 行は削除されていない、
    • -1 — 行は削除されている。

これらのカラムはテーブル作成時に追加する必要はありません。SELECTクエリで常にアクセスできます。 _versionカラムはWALLSN位置に等しいため、レプリケーションがどれくらい最新の状態であるかを確認するために使用できます。

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値のレプリケーションはサポートされていません。データ型のデフォルト値が使用されます。