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

クイックスタート:Lakebase データベース間のレプリケーション

このクイックスタートでは、1つのLakebaseデータベースから別のデータベースにシングルテーブルを複製して、論理レプリケーションの動作をエンドツーエンドで確認します。外部データベースは不要です。

始める前に​

  • 異なるプロジェクトの 2 つの Lakebase データベース: ソースとターゲット。
  • プロジェクト所有者のロールなど、databricks_superuser ロールのメンバーである各データベースの Postgres ロール。「Postgres ロールの作成」を参照してください。
  • ソースプロジェクトでパスワード接続が有効になっています。ターゲットはネイティブのPostgresパスワードロールを使ってソースに接続し、新しいプロジェクトではパスワード接続がdefaultで無効になっています。パスワード接続の管理を参照してください。
注記

ターゲットはプロジェクト間でサブスクライブし、ソースワークスペースの IP アクセス リストを通じてソースに接続します。サブスクリプションを作成する前に、ソースワークスペースの IP アクセス リストでターゲットの送信 IP アドレスを許可します。許可しないと、接続が拒否されます。「Lakebaseからのデータ複製」を参照してください。

ソース上のテーブルを公開する​

ソースデータベースに接続し、サンプルデータを含むテーブルを作成します:

SQL
CREATE TABLE playing_with_lakebase (id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name TEXT NOT NULL, value REAL);
INSERT INTO playing_with_lakebase (name, value)
SELECT LEFT(md5(i::TEXT), 10), random() FROM generate_series(1, 10) s(i);

テーブルを含むパブリケーションを作成します:

SQL
CREATE PUBLICATION my_publication FOR TABLE playing_with_lakebase;

ターゲットがそのロールとして接続できるよう、REPLICATION属性を持つパスワードロールを作成し、そのロールにテーブルへの読み取りアクセス権を付与します:

SQL
CREATE ROLE replication_user WITH LOGIN REPLICATION PASSWORD '<password>';
GRANT SELECT ON playing_with_lakebase TO replication_user;

ターゲットでサブスクライブする​

ターゲットデータベースに接続し、同じテーブルを作成します。論理レプリケーションはスキーマではなくデータをコピーするため、テーブルが先に存在する必要があります。

SQL
CREATE TABLE playing_with_lakebase (id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name TEXT NOT NULL, value REAL);

replication_user としてソースデータベースに接続するサブスクリプションを作成します。-pooler ホスト名ではなく、ソースの直接的な Endpoint ホスト名を使用してください:

SQL
CREATE SUBSCRIPTION my_subscription
CONNECTION 'postgresql://replication_user:<password>@<source-host>/databricks_postgres?sslmode=verify-full&sslrootcert=system'
PUBLICATION my_publication;

サブスクリプションは既存の行をコピーした後、新しい変更をストリームします。

sslmode=verify-full sslrootcert=system を使用すると、接続が暗号化され、ソースの証明書が検証されます。Lakebase Endpointはパブリックに信頼された認証局を使用するため、証明書をdownloadする必要はありません。

レプリケーションの検証​

ターゲット上で、最初の行が到着したことを確認します:

SQL
SELECT COUNT(*) FROM public.playing_with_lakebase;

ソースに別の行を挿入します。

SQL
INSERT INTO playing_with_lakebase (name, value) VALUES ('new-row', 1.0);

ターゲットを再度クエリーします。新しい行が表示されます。いつでもサブスクリプションの状態と遅延を確認できます:

SQL
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;

次のステップ​