データベース - postgreSQL - バックアップ・リストア

 クラウディア
1. 概要
2. 全体
3. ロール
4. データベースごと

1. 概要

 データのバックアップは、重要です。  特に、データベースに関しては、データが命です。  データベース自体のバージョンアップや、ハードウェア等の故障に備えて、バックアップをとっておかないと、万が一のときに致命的なことになってしまいます。  最近(2020年11月16日)もそんな恐ろしいニュースがあったな。  まぁそのニュースでは、データベースは関係なさそうだし、契約上、バックアップをとってはいけない契約であったらしいが・・・。  移行先にデータがない状態で、前のシステムを消去してしまったらしい。  本ページは、下記のサイトを参考にさせていただきました。
PostgreSQL データベース接続ユーザー(ロール)のバックアップとリストア | kakiro-web カキローウェブ」
「pg_dump

2. 全体

 特に大きさその他に支障がない場合は、全体をまとめて、バックアップしたり、リストアしたりするのが最も簡単な方法です。  データベース全体をテキストファイルに出力するには

pg_dumpall --clean --if-exists --column-inserts --username=postgres > ファイル名
 圧縮なしにテキストファイルに出力しますので、比較的小さめのデータベースが対象になります。  「--clean」は、リストアの際、リストア先のデータベースをいったん、クリアする構文を仕込んでいます。  「--if-exists」は、「--clean」の際、「もしそのテーブルがあれば」という条件つきになります。  「--column-insert」は、データの入力を、「SQL」の「INSERT」文の構文にしています。  「--username=pgsql」で右辺に設定しているのは、「postgreSQL」ユーザです。  バージョン「8」までは、「pgsql」 。  バージョン「9」以降は、「postgres」になりますのでご注意ください。  上記でバックアップしたファイルをリストアするには

psql --username=postgres --file ファイル名 postgres

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」は、リストア前にデータベースを作成します。
ハイスピードプラン