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

Lakebaseからデータを複製

このガイドでは、論理レプリケーションを使用して、Lakebase データベースから外部 Postgres サブスクライバーに 変更を公開する方法を説明します。Lakebaseはパブリッシャーとして機能します。パブリケーションを定義し、外部サブスクライバーが接続して変更を受信します。

前提条件​

  • 公開元のデータベースを持つLakebaseプロジェクト。公開するテーブルが含まれています。
  • 公開を作成するためのdatabricks_superuser ロールのメンバーである Lakebase Postgres ロール。これは接続するロールであり、サブスクライバが使用するロールではありません。サブスクライバのレプリケーションロールは最初のステップで作成します。
  • プロジェクトでパスワード接続が有効になっています。サブスクライバはネイティブPostgresパスワードロールで接続し、新しいプロジェクトではパスワード接続はdefaultで無効になっています。パスワード接続を管理するを参照してください。
  • サブスクライバとして機能する外部Postgresデータベース。

論理レプリケーションは、Databricks によってワークスペースに対して有効になります。Lakebase はデフォルトでwal_level = logicalでランするため、パブリッシングをオンにするプロジェクトごとのステップはありません。

レプリケーションロールを作成する​

外部サブスクライバーが接続するための専用ロールを作成します。サブスクライバーはPostgresのユーザー名とパスワードで接続するため、OAuthロールではなく ネイティブPostgresパスワードロール を作成してください。OAuthロールは有効期間の短いDatabricksトークンで認証を行いますが、パスワードベースのサブスクリプション接続文字列ではそれを使用できません。ロールにはREPLICATION属性が必要です。Lakebaseアプリ、CLI、またはAPIで作成するロールには、databricks_superuserが付与されているかどうかに関係なく、この属性が含まれています。Lakebaseアプリの ロールの追加 > パスワード tabで、ロール名を入力します。databricks_superuserを選択する必要はありません。「ネイティブ Postgres パスワード ロールの作成」を参照してください。

パスワードを自分で設定するには、代わりに SQL を使用してロールを作成します。SQL で作成されたロールは自動的に受信しないため、 REPLICATION属性を含めます。

SQL
CREATE ROLE replication_user WITH LOGIN REPLICATION PASSWORD '<password>';

ロールがレプリケートするテーブルを所有していない場合は、読み取りアクセス権を付与してください:

SQL
GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO replication_user;

公開物を作成する​

databricks_superuserロールのメンバーとしてLakebaseデータベースに接続し、レプリケートするテーブルの公開物を作成します。各テーブルには、PRIMARY KEYまたはレプリカIDが設定されている必要があります。Postgresドキュメントの「レプリカ ID」を参照してください。

SQL
CREATE PUBLICATION my_publication FOR TABLE orders, customers;

サブスクライバーの接続を許可する​

外部サブスクライバーは、ワークスペース IP アクセス リストを適用する Databricks エッジ プロキシを介して Lakebase に接続します。サブスクライバーの IP アドレスをワークスペース IP アクセス リストで許可して、Lakebase データベースに到達できるようにします。IP アクセス リストの管理を参照してください。

サブスクライバー接続では、Private Linkはサポートされていません。サブスクライバーは、パブリックLakebase Endpoint経由で接続します。

外部データベースからサブスクライブ​

外部 Postgres データベースで、公開するテーブルと同じ名前と列でターゲットテーブルを作成します。空で作成します。ターゲットテーブルに既に列がある場合、重複するキーまたは制約違反によって初期コピーが失敗するためです。テーブルを手動で作成することも、Lakebase からスキーマをダンプしてサブスクライバーに読み込むこともできます。スキーマのみをダンプするを参照してください。

次に、外部データベースでサブスクリプションを作成できるロールとして、Lakebaseに接続するサブスクリプションを作成します。

SQL
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<lakebase-host> port=5432 dbname=<lakebase-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;

サブスクライバには直接接続を使用してください。論理レプリケーションには永続的な接続が必要であるため、<lakebase-host> は -pooler 接続プーラーのホスト名ではなく、直接のEndpointホスト名である必要があります。「接続プーリング」を参照してください。

注記

Lakebase enforces TLS on all connections, so traffic is always encrypted with no action needed. For the strongest protection, connect with sslmode=verify-full, which also verifies the Lakebase server certificate against your system's root store. Lakebase uses a publicly trusted certificate, so no extra certificate is needed. The weaker sslmode=require encrypts but does not verify the server.

レプリケーションの確認​

サブスクライバで、行が到着したことを確認し、ラグを確認します:

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

初期コピーが完了したことを確認するには、サブスクライバーのレプリケーションの監視でテーブルごとの同期ステータスクエリーを実行し、すべてのテーブルが Ready (fully live)と読み取られるまで待ちます。

サブスクライバの接続は、Lakebaseパブリッシャーでレプリケーションスロットを維持します。サブスクライバがアクティブにレプリケートしている間、Lakebaseコンピュートはゼロにスケールしません。論理レプリケーションとゼロへのスケールを参照してください。サブスクライバが変更の消費を停止すると、スロットは非アクティブになり、Lakebaseは約40時間後にスロットを削除します。非アクティブなスロットの自動削除を参照してください。

次のステップ​