ただ単にタイトル通りのことをしたかっただけなのにやたらと苦労したのでまとめ。
この記事で扱うもの
※実際に使用しているコマンドについてのみ記載する。
バックアップ
バックアップするにはpg_dump
コマンドを使用する。
pg_dump [connection-option...] [option...] [dbname]
pg_dump -h [IPアドレス/ホスト名] -p [ポート番号] -U [ユーザ名] -d [データベース名] -Fc -v -f [バックアップファイル名]
説明
-
-h [IPアドレス/ホスト名]
データベースサーバーのIPアドレス、またはホスト名を指定する。
ローカルにデータベースがおいてあるのであれば、localhost
と指定するか、もしくは省略できる。 -
-p [ポート番号]
データベース接続に使用しているポート番号を指定する。
デフォルトのままであれば5432
と指定するか、もしくは省略できる。 -
-U [ユーザ名]
接続オプション。
データベース接続に使用しているユーザ名を指定する。
省略した場合、コンピュータ名となる模様。※未検証 -
-d [データベース名]
バックアップしたいデータベースの名前を指定する。
このパラメータを省略して[dbname]
部分に指定することもできる。 -
-Fc
バックアップの出力形式。
-F
とc
を組み合わせたもの。
c
の他にp
d
t
とあるが、特段の理由が無ければ-Fc
と指定する。 -
-v
バックアップの進捗がコンソール上に表示される。
省略可能。 -
-f [バックアップファイル名]
任意のファイル名を指定する。
絶対パス/相対パスのどちらを指定しても問題ない。
拡張子の指定もない。
backup
でもbackup.dump
でもなんでもいい。
使用例
pg_dump -h localhost -p 5432 -U postgres -d dbname -Fc -v -f backup.dump
リストア
PostgreSQL 12.4文書 - pg_restore
バックアップするにはpg_restore
コマンドを使用する。
pg_restore [connection-option...] [option...] [filename]
pg_restore -h [IPアドレス/ホスト名] -p [ポート番号] -U [ユーザ名] -d [データベース名] -v -c --if-exists -j [ジョブ数] [バックアップファイル名]
説明
-
-h [IPアドレス/ホスト名]
データベースサーバーのIPアドレス、またはホスト名を指定する。
ローカルにデータベースがおいてあるのであれば、localhost
と指定するか、もしくは省略できる。 -
-p [ポート番号]
データベース接続に使用しているポート番号を指定する。
デフォルトのままであれば5432
と指定するか、もしくは省略できる。 -
-U [ユーザ名]
接続オプション。
データベース接続に使用しているユーザ名を指定する。
省略した場合、コンピュータ名となる模様。※未検証 -
-d [データベース名]
リストアしたいデータベースの名前を指定する。 -
-v
リストアの進捗がコンソール上に表示される。
省略可能。 -
-c
データベース内のテーブルが削除されてからリストアが実行される。
pg_restore: エラー: could not execute query
なるエラーが発生する場合に追加。
省略可能。-
--if-exists
-c
と併用するパラメータ。
DROP
文にIF EXISTS
が追加される。
削除対象のテーブルが存在しない場合にDROP
文が実行されなくなる。
省略可能。
-
-
-j [ジョブ数]
リストア処理が複数セッションで並列処理される。
CPUのコア数を目安に指定する。
処理速度が改善する場合がある。
省略可能。 -
[バックアップファイル名]
任意のファイル名を指定する。
絶対パス/相対パスのどちらを指定しても問題ない。
使用例
pg_restore -h localhost -p 5432 -U postgres -d dbname -v -c --if-exists -j 4 backup.dump
オマケ
変数にパスワードを設定しておけば何回もパスワードを入力しなくて済む。
SET PGPASSWORD=postgres
その他、各変数に値を設定しておけば対応するパラメータを省略できる。
SET PGHOST=localhost
SET PGPORT=5432
SET PGUSER=postgres
SET PGDATABASE=dbname