[エクスペリメンタル] MaterializedPostgreSQL
PostgreSQL テーブルの初期データダンプを作成し、レプリケーションプロセスを開始します。つまり、リモートの PostgreSQL データベース内の PostgreSQL テーブルで発生した新しい変更を逐次適用するためのバックグラウンドジョブを実行します。
このテーブルエンジンはエクスペリメンタルです。使用するには、設定ファイルまたは SET コマンドを使用して allow_experimental_materialized_postgresql_table を 1 に設定します:
SET allow_experimental_materialized_postgresql_table=1
複数のテーブルが必要な場合は、テーブルエンジンではなくMaterializedPostgreSQL データベースエンジンを使用し、レプリケートするテーブルを指定する materialized_postgresql_tables_list 設定(データベーススキーマも追加可能になります)を使用することを強くお勧めします。これにより、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— ユーザーパスワード。
要件
PostgreSQL の設定ファイルで、wal_level 設定は
logical、max_replication_slotsパラメータは少なくとも2である必要があります。MaterializedPostgreSQLエンジンを持つテーブルには、PostgreSQL テーブルのレプリカアイデンティティインデックス(デフォルトでは主キー、レプリカアイデンティティインデックスの詳細はこちら)と同じ主キーが必要です。データベースAtomic のみが許可されています。
MaterializedPostgreSQLテーブルエンジンは、PostgreSQL バージョンが >= 11 でのみ動作します。これは、pg_replication_slot_advance PostgreSQL 関数を必要とするためです。
バーチャルカラム
これらのカラムはテーブル作成時に追加する必要はありません。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 値のレプリケーションはサポートされていません。データ型のデフォルト値が使用されます。