ClickHouse/docs/ja/engines/table-engines/integrations/materialized-postgresql.md
2024-11-18 11:58:58 +09:00

4.1 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/engines/table-engines/integrations/materialized-postgresql 130 MaterializedPostgreSQL

[エクスペリメンタル] MaterializedPostgreSQL

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

:::note このテーブルエンジンはエクスペリメンタルです。使用するには、設定ファイルまたは 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 — ユーザーパスワード。

要件

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

  2. MaterializedPostgreSQL エンジンを持つテーブルには、PostgreSQL テーブルのレプリカアイデンティティインデックス(デフォルトでは主キー、レプリカアイデンティティインデックスの詳細はこちら)と同じ主キーが必要です。

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

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

バーチャルカラム

  • _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;

:::note TOAST 値のレプリケーションはサポートされていません。データ型のデフォルト値が使用されます。 :::