Postgres の pg_dump と pg_restore

このトピックでは、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を使用してバックアップを作成する

データベース バックアップをローカルに作成するには:

  1. ワークスペースの右上にあるアプリスイッチャーをクリックして、Lakebaseアプリに移動します。

  2. プロジェクトを選択します。

  3. [ 接続 ] をクリックして、データベース接続モーダルを開きます。

  4. ドロップダウンから Postgres ロールを選択します (パスワード認証でネイティブ Postgres ロールを使用することをお勧めします)。

  5. 接続文字列をコピーします。

    接続文字列は次のようになります。

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. 次の 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 ユーティリティを使用してデータベースを復元するには:

  1. 新しい Lakebase プロジェクトを作成します。

  2. バックアップしたデータベースと同じ名前のデータベースを作成します。

  3. ワークスペースの右上にあるアプリスイッチャーをクリックして、Lakebaseアプリに移動します。

  4. プロジェクトを選択し、[ 接続 ] をクリックしてデータベース接続モーダルを開きます。

  5. ドロップダウンから Postgres ロールを選択します (パスワード認証でネイティブ Postgres ロールを使用することをお勧めします)。

  6. 接続文字列をコピーします。

    接続文字列は次のようになります。

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. pg_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

スキーマだけをダンプする

スキーマのみのダンプは、行データなしでテーブルの定義、インデックス、制約をコピーします。 新しいターゲットにデータベースの構造が必要で、その内容は必要ないときに使ってください。

最も一般的な理由は、論理レプリケーションのためにターゲットデータベースを準備することです。 論理的レプリケーションはスキーマではなくデータをコピーします。レプリケーション開始前に、出版物内のテーブルは同じ名前と列で既にサブスクライバー上に存在していなければならず、各ターゲットテーブルは空でなければならず、初期コピーが重複キーで失敗しないようにします。 スキーマのみのダンプと再読み込みは、テーブルを手動で作成するよりも通常より速く、エラーも少なくなります。

  1. ソースデータベースからスキーマだけをダンプします。 --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
    
  2. ダンプファイルを確認し、ターゲットがサポートしない文 (プロバイダー固有のパラメータや拡張など) をコメントアウトしてください。 行頭に -- を追加して、その行をコメントアウトします。

    大規模なデータセットを複製する場合は、スキーマを読み込む前に CREATE INDEX 文を削除することも検討してください。 初期複製コピー中にインデックスを作成すると動作が遅くなります。 削除したステートメントを保存し、最初のコピーが完了したらインデックスを戻してください。

  3. psqlでターゲットデータベースにスキーマを読み込みます:

    psql "<target_connection_string>" < schema_dump.sql
    

    表が作成されたことを確認してください:

    psql "<target_connection_string>" -c "\dt"