PostgreSQL バックアップリストア(pg_dump、pg_dumpall、pg_restore)

pg_dump

https://www.postgresql.jp/document/11/html/app-pgdump.html
第8回 バックアップ・リストア

  • pg_dump [接続オプション] [-Fp|-Fc|-Fd|-Ft] [-f ファイル名] [データベース名]
    • -Fp…平文(Plain)で出力する。-Fを省力した場合のデフォルト。
    • -Fc…カスタム形式で出力する。
    • -Fd…ディレクトリ形式で出力する。
    • -Ft…tar形式で出力する。
    • -f …出力先に指定するファイル名。省略した場合は標準出力となる。
    • -s データ定義(スキーマ)のみをダンプし、データはダンプしない。
    • -a データのみを出力。
    • -U 接続ユーザ名。
  • psql [接続オプション] [オプション] [データベース名]
    • テキスト形式のバックアップをリストアする。
  • pg_restore [接続オプション] [-d データベース名] [ファイル名]
    • カスタム形式やtar形式のように、平文以外の形式でバックアップした場合に使用。

PostgreSQLサーバーが動いている状態で実行する。
GRANTやREVOKEによるアクセス権限は、各データベース内にあるため、バックアップされる。
インデックスはバックアップに含まれない。
物理バックアップの方が高速だが、サイズは大きい。(pg_dumpは低速だがサイズが小さい)
標準出力にバックアップを出力することができる。

pg_dumpall

https://www.postgresql.jp/document/11/html/app-pg-dumpall.html
第8回 バックアップ・リストア

  • $ pg_dumpall -f db.sql

PostgreSQLサーバーが動いている状態で実行する。
データベースクラスタ全体のバックアップを取得する。(ユーザ情報などを含む)
バックアップに設定ファイルは含まれない。
内部的には、個々のデータベースについてpg_dumpコマンドを実行する。
テキスト形式でしか出力できない。
オプションを指定することで、グローバルオブジェクトのみをバックアップすることも可能。
psqlコマンドを使用してリストアする。

pg_restore

https://www.postgresql.jp/document/11/html/app-pgrestore.html

  • pg_restore [接続オプション] [オプション] [ファイル名]
    • -c, --clean リストア前に既存のデータベースオブジェクトを削除する。
    • -d, --dbname データベース名。
    • -1, --single-transaction リストア処理を1つのトランザクションとして実行する。
    • -j, --jobs= 同時に実行するジョブ数。

リストア対象には、テーブルデータの他にラージオブジェクトやシーケンス値が含まれる。
リストア先に指定するデータベースは、リストア時に作成されている必要がある。
標準出力に出力することができる。