データベース - postgreSQL - バックアップ・リストア
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」は、リストア前にデータベースを作成します。
「PostgreSQL データベース接続ユーザー(ロール)のバックアップとリストア | kakiro-web カキローウェブ」 「pg_dump」
pg_dumpall --clean --if-exists --column-inserts --username=postgres --file ファイル名
pg_dumpall --port=ポート番号 ...
pg_dumpall --encoding=エンコード ...
psql --quiet --username=postgres --file ファイル名 postgres
INSERT 0 1
pg_dumpall --roles-only --clean --if-exists > ファイル名
psql -f ファイル名 postgres
pg_dump -Fp データベース名 > ファイル名
psql -d データベース名 -f ファイル名
pg_dump -Fc データベース名 > ファイル名
pg_restore --clean --create ファイル名