データベースのバックアップにはpg_dump.exeコマンドを使用します。
PostgreSQLサーバーをインストールしている場合は、pg_dump.exeにパスが通っているのでフルパス指定をしなくてもコマンドを実行できますが、パスが通っていない場合はパスを通すかフルパスでコマンド指定してください。
コマンド形式
-- 一般的なデータベースバックアップコマンドとそのオプション
pg_dump -U ユーザー名 -d データベース名 > バックアップファイル名
バックアップファイル名は「”」(ダブルクオーテーション)で囲って指定することも可
ユーザー名は指定しなくてもよいが指定していない場合はOSにログインしているユーザ名でのログインで実行されるので基本的には指定しておいたほうがいいです。
オプション
-Fp | plain(SQL)形式(デフォルト) | SQL文で出力されたプレーンテキスト形式 |
-Fc | カスタム形式 | 圧縮ファイル形式 |
-Ft | tar形式 | tar圧縮ファイル形式 |
コマンド実行例
> pg_dump -U postgres -d sample_db > backup_file.txt
エラー等のメッセージが表示されることなくコマンドプロンプトが入力可能状態になればバックアップ完了です。
エラーが出た場合は何かしらコマンド内容が間違っているので入力したコマンドを見直してみましょう。
また、コマンド実行後下記のようにコマンドプロンプトに表示されてファイルが作成されないもしくはファイルが作成されても0Kbyteでデータが作成された場合はPostgreSQLのログを確認してみてください。
-- 失敗した際の不明メッセージ例
> pg_dump: [アーカイバ(db)]
データベース全体のバックアップにはpg_dumpall.exeコマンドを使用します。
pg_dumpと違いオプションで形式を指定することはできません。
pg_dumpall -f sampleDB_all.sql
データベースのリストアにはpsqlもしくはpg_restore.exeコマンドを使用します。
pg_dump.exeと同様パスが通っている場合はフルパスを指定せずにコマンドだけで実行することができます。
コマンド形式
-- psqlとそのオプション
psql データベース名 < ファイル名
-- pg_restoreとそのオプション
pg_restore -U ユーザー名 -d データベース名 -f リストア元のファイル名(もしくはフルパス)
コマンド実行例
> psql -U postgres sample_db < backup1.sql
コマンド実行後にエラーメッセージが表示されたりエラーメッセージが表示されていないくてもファイルが生成されていないもしくはファイルが0Kbyteで作成されて失敗している場合はPostgreSQLのログを確認してみてください。
PostgreSQLのログは下記のファイルに格納されています。
PostgreSQLインストールフォルダ/data/logs/pg[version]/postgresql-[曜日].log
pg_restore: [アーカイバ(db)]
NG
pg_restore -d sample_db sample_db_dump.backup
OK
「-U」で実行ユーザーを指定
pg_restore -U postgres -d sample_db sample_db_dump.backup
psql: FATAL: role “user” does not exist
NG
psql sample_db < backup1.sql
OK
「-U」で実行ユーザーを指定
psql -U postgres sample_db < backup1.sql
pg_restore: -d/–dbnameオプションと-f/–fileオプションは同時に使用できません
NG
pg_restore -d sample_db -U postgres -f sample_db_dump.backup
OK
「-f」オプションを外して実行
pg_restore -d sample_db -U postgres -f sample_db_dump.backup
-a, --data-only データのみをダンプし、スキーマをダンプしません
-b, --blobs ラージオブジェクトと共にダンプします
-B, --no-blobs ラージオブジェクトをダンプしません
-c, --clean 再作成前にデータベースオブジェクトを整理(削除)
-C, --create ダンプにデータベース生成用コマンドを含めます
-E, --encoding=ENCODING 指定の符号化方式でデータをダンプ
-n, --schema=SCHEMA 指名したスキーマ(複数可)のみをダンプ
-N, --exclude-schema=SCHEMA 指名されたスキーマ(複数可)をダンプしません
-o, --oids ダンプにOIDを含めます
-O, --no-owner プレインテキスト形式で、オブジェクト所有権の
復元を飛ばします
-s, --schema-only スキーマのみをダンプし、データはダンプしません
-S, --superuser=NAME プレインテキスト形式で使用するスーパーユーザ名
-t, --table=TABLE 指定したテーブル(複数可)のみをダンプ
-T, --exclude-table=TABLE 指定したテーブル(複数可)をダンプしません
-x, --no-privileges 権限(grant/revoke)をダンプしません
--binary-upgrade アップグレードユーティリティでのみ使用します
--column-inserts 列名指定のINSERTコマンドとしてデータをダンプ
--disable-dollar-quoting ドル記号による引用を無効にして、SQL標準の引用を
使います
--disable-triggers データのみのリストアをする際、トリガを無効にし
ます
--enable-row-security 行セキュリティを有効にします (ユーザがアクセス
許可を持つ内容のみダンプします)
--exclude-table-data=TABLE 指定したテーブル(複数可)のデータをダンプしません
--if-exists オブジェクトの削除の際に IF EXISTS を使います
--inserts COPYではなくINSERTコマンドとしてデータをダンプ
します
--no-publications パブリケーションをダンプしません
--no-security-labels セキュリティラベルの割り当てをダンプしません
--no-subscriptions サブスクリプションをダンプしません
--no-synchronized-snapshots 並列ジョブにおいて同期化スナップショットを使用し
ません
--no-tablespaces テーブルスペースの割り当てをダンプしません
--no-unlogged-table-data UNLOGGEDテーブルのデータをダンプしません
--quote-all-identifiers キーワードかどうかにかかわらずすべての識別子を
引用符で囲います
--section=SECTION 指定したセクション(pre-data, data, post-data)を
ダンプします
--serializable-deferrable 異常なくダンプを実行できるようになるまで待機します
--snapshot=SNAPSHOT 指定したスナップショットを使用してダンプを行います
--strict-names テーブルやスキーマの追加指定パターンが最低1つの
実体にマッチすることを必須とします
--use-set-session-authorization
所有権を設定する際に、ALTER OWNER コマンドではなく
SET SESSION AUTHORIZATION コマンドを使用します
接続オプション:
-d, --dbname=DBNAME ダンプするデータベース
-h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクトリ
-p, --port=PORT データベースサーバのポート番号
-U, --username=NAME 指定のデータベースユーザで接続
-w, --no-password パスワード入力を要求しません
-W, --password パスワードプロンプトを強制 (自動的に行われます)
--role=ROLENAME ダンプの前に SET ROLE を行います
-d, --dbname=NAME 接続するデータベース名
-f, --file=FILENAME 出力ファイル名
-F, --format=c|d|t バックアップファイルの書式
(自動的に設定されるはずです)
-l, --list アーカイブのTOCの要約を表示
-v, --verbose 冗長モード
-V, --version バージョン情報を表示し、終了します
-?, --help このヘルプを表示し、終了します
リストア制御のオプション:
-a, --data-only データのみをリストア。スキーマをリストアしません
-c, --clean 再作成前にデータベースオブジェクトを整理(削除)
-C, --create 対象のデータベースを作成
-e, --exit-on-error エラー時に終了。デフォルトは継続
-I, --index=NAME 指名したインデックスをリストア
-j, --jobs=NUM リストア時に指定した数の並列ジョブを使用
-L, --use-list=FILENAME このファイルの内容に従ってSELECTや出力のソートを
行います
-n, --schema=NAME 指定したスキーマのオブジェクトのみをリストア
-n, --schema=NAME 指定したスキーマのオブジェクトのみをリストア
-O, --no-owner オブジェクトの所有権の復元を省略
-P, --function=NAME(args) 指名された関数をリストア
-s, --schema-only スキーマのみをリストア。データをリストアしません
-S, --superuser=NAME トリガを無効にする際に使用するスーパーユーザの名前
-t, --table=NAME 指名したリレーション(テーブル、ビューなど)をリス
トア
-T, --trigger=NAME 指定したトリガをリストア
-x, --no-privileges アクセス権限(grant/revoke)の復元を省略
-1, --single-transaction 単一のトランザクションとしてリストア
--disable-triggers データのみのリストアをする際、トリガを無効にし
ます
--enable-row-security 行セキュリティを有効にします
--if-exists オブジェクトの削除の際に IF EXISTS を使います
--no-data-for-failed-tables 作成できなかったテーッブルのデータはリストア
しません
--no-publications パブリケーションをリストアしません
--no-security-labels セキュリティラベルをリストアしません
--no-subscriptions サブスクリプションをリストアしません
--no-tablespaces テーブル空間の割り当てをリストアしません
--section=SECTION 指定したセクション (pre-data, data, post-data)
をリストア
--strict-names テーブルやスキーマの追加指定パターンが最低1つの
実体にマッチすることを必須とします
--use-set-session-authorization
所有権を設定する際に、ALTER OWNER コマンドではなく
SET SESSION AUTHORIZATION コマンドを使用します
接続オプション:
-h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクトリ
-p, --port=PORT データベースサーバのポート番号
-U, --username=NAME 指定のデータベースユーザで接続
-w, --no-password パスワード入力を要求しません
-W, --password パスワードプロンプトを強制 (自動的に行われます)
--role=ROLENAME リストアに先立って SET ROLE します