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 (disable、allow、prefer、require、verify-ca、verify-full。未設定の場合は libpq のデフォルトである prefer が適用されます) と、2 種類の形式で指定できる証明書および秘密鍵です。sslrootcert (CA 証明書) 、sslcert (クライアント証明書) 、sslkey (クライアント秘密鍵) はサーバーローカルのファイルへのパスであり、サーバー設定ファイルで定義された named collection からのみ受け付けられます。一方、sslrootcert_pem、sslcert_pem、sslkey_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 の接続パラメータに含まれ、テーブルの作成時に固定されます。
要件
-
PostgreSQL の設定ファイルで、wal_level の値を
logicalに設定し、max_replication_slotsパラメータの値を少なくとも2に設定する必要があります。 -
MaterializedPostgreSQLエンジンを使用するテーブルには、PostgreSQL テーブルの replica identity index (デフォルトでは主キー) と同じ主キーが必要です (replica identity index の詳細を参照) 。 -
使用できるのは Atomic データベースのみです。
-
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;