このトピックでは、Postgres pg_dump ユーティリティを使用して Lakebase データベースのバックアップを作成する方法と、 pg_restoreを使用してバックアップを復元する方法について説明します。
pg_dump &pg_restore を使用する場合
ディザスター リカバリーとビジネス継続性の要件、または Lakebase の外部に完全バックアップを格納する必要がある場合は、 pg_dump と pg_restore を使用します。 このメソッドは、独立して格納し、Postgres 互換システムに復元できる完全なデータベース エクスポートを提供します。
切り替えまでターゲットを最新の状態に保つ移行の場合は、代わりに論理レプリケーションを使いましょう。 Lakebaseへのデータの出入り方法を比較するには、「Lakebaseへのデータの入出力」をご覧ください。
前提 条件
開始する前に、次のことを確認します。
-
pg_dumpとpg_restoreがインストールされます。pg_dump -Vを実行して確認できます。 - 最新バージョンの
pg_dumpとpg_restoreを使用しています。 - クライアントのバージョンは、Lakebase プロジェクトの Postgres バージョンと一致します。
- Postgres ロールが構成された Lakebase プロジェクト
注
とpg_dumpを使用する場合は、pg_restoreを使用することをお勧めします。 ネイティブ Postgres パスワードは OAuth トークンのように時間単位で期限切れになりません。バックアップと復元の操作に適しています。 認証方法の詳細については、「 認証の概要 」を参照してください。
pg_dumpとpg_restoreをインストールする
pg_dumpユーティリティとpg_restoreユーティリティがローカルにインストールされていない場合は、任意のプラットフォームにインストールします。
Windows: postgresql.org の公式インストーラーを使用して PostgreSQL をインストールします。 pg_dump ユーティリティと pg_restore ユーティリティは既定でインストールされ、PostgreSQL bin ディレクトリにあります。
Macos: Homebrew を使用して PostgreSQL をインストールします。
brew install postgresql
Linux(Ubuntu/Debian):
sudo apt-get install postgresql-client
Docker: Postgres Docker コンテナーを使用して pg_dump を実行します。
docker run --rm postgres:17 pg_dump --version
pg_dumpを使用してバックアップを作成する
データベース バックアップをローカルに作成するには:
ワークスペースの右上にあるアプリスイッチャーをクリックして、Lakebaseアプリに移動します。
プロジェクトを選択します。
[ 接続 ] をクリックして、データベース接続モーダルを開きます。
ドロップダウンから Postgres ロールを選択します (パスワード認証でネイティブ Postgres ロールを使用することをお勧めします)。
接続文字列をコピーします。
接続文字列は次のようになります。
postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require次の
pg_dumpコマンドを実行して、Lakebase データベースのバックアップを作成します。pg_dump -Fc -v -d "<lakebase_database_connection_string>" -f <dump_file_name>Lakebase データベース接続文字列とダンプ ファイル名を追加すると、コマンドは次のようになります。
pg_dump -Fc -v -d "postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require" -f mydatabase.bak
pg_dumpコマンドの引数
pg_dump コマンドには、次の引数が含まれています。
-
-Fc:pg_restoreへの入力に適したカスタム形式のアーカイブに出力を送信します。 -
-v: 詳細モードでpg_dump実行され、ダンプ操作中の動作を監視できます。 -
-d: Lakebase データベースの接続文字列を指定します。 -
-f <dump_file_name>: ダンプ ファイル名。 任意の名前を選択できます (たとえば、mydumpfile.bak)。
pg_restoreを使用してバックアップを復元する
pg_restoreを使用して作成したバックアップ ファイルからpg_dump ユーティリティを使用してデータベースを復元するには:
新しい Lakebase プロジェクトを作成します。
バックアップしたデータベースと同じ名前のデータベースを作成します。
ワークスペースの右上にあるアプリスイッチャーをクリックして、Lakebaseアプリに移動します。
プロジェクトを選択し、[ 接続 ] をクリックしてデータベース接続モーダルを開きます。
ドロップダウンから Postgres ロールを選択します (パスワード認証でネイティブ Postgres ロールを使用することをお勧めします)。
接続文字列をコピーします。
接続文字列は次のようになります。
postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=requirepg_restoreを使用して、Lakebase のターゲット データベースにデータを復元します。pg_restore -v -d "<lakebase_database_connection_string>" <dump_file_name>Lakebase データベース接続文字列とダンプ ファイル名を追加すると、コマンドは次のようになります。
pg_restore -v -d "postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require" mydatabase.bak
pg_restore コマンドの引数
pg_restore コマンドには、次の引数が含まれています。
-
-v:pg_restore詳細モードで実行され、復元操作中の動作を監視できます。 -
-d: 接続先の Lakebase データベースを指定します。 値は、Lakebase データベース接続文字列です。 -
<dump_file_name>:pg_dumpで作成したダンプ ファイルの名前。
完全な例
次の例は、1 つの Lakebase プロジェクトで databricks_postgres という名前のソース データベースからデータをダンプし、別の Lakebase プロジェクトの databricks_postgres データベースに復元する方法を示しています。
この手順を実行する前に、次の手順を実行します。
- コピー先データベース用に新しい Lakebase プロジェクトが作成されました (既定の
databricks_postgresデータベースが含まれます) - ソース データベースと移行先データベースの接続文字列が収集されました。
-
ソース:
postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require -
目的地:
postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
-
ソース:
バックアップと復元の手順:
# Create a directory for the dump
mkdir mydump && cd mydump
# Create the backup
pg_dump -Fc -v -d "postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require" -f mydatabase.bak
# Verify the backup file was created
ls
mydatabase.bak
# Restore the backup to the destination database
pg_restore -v -d "postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require" mydatabase.bak
スキーマだけをダンプする
スキーマのみのダンプは、行データなしでテーブルの定義、インデックス、制約をコピーします。 新しいターゲットにデータベースの構造が必要で、その内容は必要ないときに使ってください。
最も一般的な理由は、論理レプリケーションのためにターゲットデータベースを準備することです。 論理的レプリケーションはスキーマではなくデータをコピーします。レプリケーション開始前に、出版物内のテーブルは同じ名前と列で既にサブスクライバー上に存在していなければならず、各ターゲットテーブルは空でなければならず、初期コピーが重複キーで失敗しないようにします。 スキーマのみのダンプと再読み込みは、テーブルを手動で作成するよりも通常より速く、エラーも少なくなります。
ソースデータベースからスキーマだけをダンプします。
--schema-onlyオプションは行データを除外し、--no-ownerはターゲットに存在しない可能性のあるロールの所有者ステートメントをスキップし、--no-privilegesはターゲットに適用されない可能性のある権限付与をスキップし、--no-publicationsと--no-subscriptionsはソースのレプリケーション設定がターゲットに含まれないようにします。pg_dump --schema-only --no-owner --no-privileges --no-publications --no-subscriptions "<source_connection_string>" > schema_dump.sqlダンプファイルを確認し、ターゲットがサポートしない文 (プロバイダー固有のパラメータや拡張など) をコメントアウトしてください。 行頭に
--を追加して、その行をコメントアウトします。大規模なデータセットを複製する場合は、スキーマを読み込む前に
CREATE INDEX文を削除することも検討してください。 初期複製コピー中にインデックスを作成すると動作が遅くなります。 削除したステートメントを保存し、最初のコピーが完了したらインデックスを戻してください。psqlでターゲットデータベースにスキーマを読み込みます:psql "<target_connection_string>" < schema_dump.sql表が作成されたことを確認してください:
psql "<target_connection_string>" -c "\dt"