- 1. 概要
- 2. 全体
- 3. ロール
- 4. データベースごと
1. 概要
データのバックアップは、重要です。
特に、データベースに関しては、データが命です。
データベース自体のバージョンアップや、ハードウェア等の故障に備えて、バックアップをとっておかないと、万が一のときに致命的なことになってしまいます。
最近(2020年11月16日)もそんな恐ろしいニュースがあったな。
まぁそのニュースでは、データベースは関係なさそうだし、契約上、バックアップをとってはいけない契約であったらしいが・・・。
移行先にデータがない状態で、前のシステムを消去してしまったらしい。
本ページは、下記のサイトを参考にさせていただきました。
「PostgreSQL データベース接続ユーザー(ロール)のバックアップとリストア | kakiro-web カキローウェブ」
「pg_dump」
2. 全体
特に大きさその他に支障がない場合は、全体をまとめて、バックアップしたり、リストアしたりするのが最も簡単な方法です。
データベース全体をテキストファイルに出力するには
pg_dumpall --clean --if-exists --column-inserts --username=postgres --file ファイル名
圧縮なしにテキストファイルに出力しますので、比較的小さめのデータベースが対象になります。
「--clean」は、リストアの際、リストア先のデータベースをいったん、クリアする構文を仕込んでいます。
「--if-exists」は、「--clean」の際、「もしそのテーブルがあれば」という条件つきになります。
「--column-insert」は、データの入力を、「SQL」の「INSERT」文の構文にしています。
「--username=pgsql」で右辺に設定しているのは、「postgreSQL」ユーザです。
バージョン「8」までは、「pgsql」 。
バージョン「9」以降は、「postgres」になりますのでご注意ください。
デフォルトでは、ポート番号「5432」で接続しています。
「PostgreSQL」側で、接続に使用しているポート番号が異なる場合は、下記のように指定します。
pg_dumpall --port=ポート番号 ...
文字のエンコードを変更する際は、下記のように指定します。
(「PostgreSQL 9.6」では、このオプションは効きません)
pg_dumpall --encoding=エンコード ...
上記でバックアップしたファイルをリストアするには
psql --quiet --username=postgres --file ファイル名 postgres
「--quiet」オプションは、冗長な出力を避けるものです。
1行「Insert」につき。
INSERT 0 1
てな、出力があるので、このオプションはつけておいた方がよいでしょう。
3. ロール
バックアップ。
pg_dumpall --roles-only --clean --if-exists > ファイル名
リストア。
psql -f ファイル名 postgres
4. データベースごと
データベースごとにバックアップするには、「pg_dump」を使用します。
「pg_dump」は、テキスト形式の他、アーカイブ形式、さらにアーカイブを圧縮したりもできます。
ここでは、テキスト形式とアーカイブ形式の2例を紹介します。
テキスト形式でバックアップ。
pg_dump -Fp データベース名 > ファイル名
「-F」がフォーマット指定で、「p」がプレーンテキスト。
省略可能です。
リストア。
psql -d データベース名 -f ファイル名
カスタムアーカイブ形式でバックアップ。
pg_dump -Fc データベース名 > ファイル名
「c」は、カスタムアーカイブ形式。
リストア。
pg_restore --clean --create ファイル名
「--clean」は、再作成前にデータベースオブジェクトを整理(削除)します。
「--create」は、リストア前にデータベースを作成します。
|
|