😐

PostgreSQL ダンプファイル (format=custom) を使った不要なエクステンションを除外したリストア方法

2025/02/15に公開

PostgreSQL のカスタム形式 (format=custom, -Fc) のダンプファイルから不要なエクステンションを削除してローカルデータベースにリストアする手順を以下にまとめます。


手順概要

  1. ダンプファイルのオブジェクトリストを抽出
  2. リストファイルを編集して不要なエクステンションを削除
  3. 編集済みリストを使用してリストアを実行

1. ダンプファイルのオブジェクトリストを抽出

カスタム形式のダンプファイルはバイナリ形式のため、直接編集はできません。そのため、pg_restore--list オプションを使って、ダンプファイル内のオブジェクト一覧を取得します。

コマンド

pg_restore --list your_dump_file.dump > dump-contents.list

出力例 (dump-contents.list の内容)

1234; EXTENSION - hstore; ...
1235; EXTENSION - uuid-ossp; ...
1236; TABLE DATA - public.my_table
1237; TABLE DATA - public.another_table
  • 1234: オブジェクトID
  • EXTENSION - hstore: エクステンションの種類と名前
  • TABLE DATA - public.my_table: テーブルデータ

2. リストファイルを編集して不要なエクステンションを削除

不要なエクステンションがリストアされないように、該当する行を削除またはコメントアウトします。

編集例

# 1234; EXTENSION - hstore; ...
# 1235; EXTENSION - uuid-ossp; ...
1236; TABLE DATA - public.my_table
1237; TABLE DATA - public.another_table
  • # を追加して対象行を無効化(コメントアウト)。
  • エクステンション以外のオブジェクトはそのまま保持します。

保存後、編集済みの dump-contents.list を使ってリストアを実行します。また、TablePlusを使用する場合は、Restoreを実行するときにオプションで --use-list にフルパスを指定することでリストが読み込まれます。


3. 編集済みリストを使用してリストアを実行

編集したリストファイルを pg_restore--use-list オプションで指定し、ローカルデータベースにリストアします。

コマンド

pg_restore --dbname=your_database_name \
  --use-list=/path/to/dump-contents.list \
  your_dump_file.dump

オプションの説明

  • --dbname=your_database_name: リストア先のデータベース名を指定します。
  • --use-list=dump_contents.list: 編集済みリストを使用してリストアするオブジェクトを制御します。
  • your_dump_file.dump: ダンプファイルのパスを指定します。

注意点

  1. エクステンションに依存するデータ

    • エクステンションが削除されると、依存するオブジェクトやデータが正しく動作しない可能性があります。
    • 必要に応じてエクステンションをリストア後に再インストールしてください。
    CREATE EXTENSION hstore;
    
  2. リストファイルのバックアップ

    • オリジナルのリストファイルをバックアップしておくと、編集ミス時の復元が簡単になります。
  3. pg_restore** のバージョン**

    • ダンプファイルを作成した PostgreSQL バージョンと同じか互換性のある pg_restore を使用してください。

まとめ

この手順を使えば、不要なエクステンションを除外して効率的にダンプファイルをリストアできます。特に開発環境やテスト環境でのリストア作業に役立ちます。

Discussion