postgresqlに接続する場合は、postgresqlのSuperUser(postgres)にスイッチする必要がある。 # su - postgres データベース全体のバックアップ [#ce607ac8] pg_dumpall †$ pg_dumpall > pg_dumpall.sql $ pg_dumpall -c > pg_dumpall.sql TIPS †真っ白なDB、すでに存在しているDBを注意する必要がある。 データベース全体リストア †上記の結果で分かるように、リストアする場合もdumpを取った形式によってリストアの方法も変わってくる。 psqlコマンドでリストア †$ psql < pg_dumpall.sql psql:pg_dumpall:11: ERROR: role "postgres" already exists etc... これがすでに存在しているパターン。
データベース個別バックアップ †pg_dump †pg_dumpはバックアップを出力するときの形式によってリストア方法が変わる。 以下は、出力形式がバイナリでsql文に-c、-Cをそれぞれ使用した場合 ・pg_dumpパターン2 ・pg_dumpパターン3 ・pg_dumpパターン4 オプションについて -F format p:プレインテキストのSQLを出力する(デフォルト) t:pg_restoreへの入力に適したtarアーカイブを出力する。 このアーカイブ書式の使用は、データベースがリストアされる時のスキーマ要素の削除もしくは並び替えを可能にする。 どのデータがリストア時にリロードされるかを制限することも可能。 c:pg_restoreへの入力に適したカスタムアーカイブを出力する。 これは、もっとも柔軟な書式であり、スキーマ要素だけでなくデータロードの並び替えも可能。 この書式もデフォルトで圧縮される。 その他オプションについて -C:--createの略でdumpから戻すときには''データベースを作成する''意味になる。 当然リストア先にデータベースが存在する場合にはエラーが出て処理できない。 -c:--cleanの略でdumpから戻すときには''データベースを掃除する''意味になる。 つまり、すでに存在していても一度削除してから再構築することになる。 postgresqlのグローバルデータの取得 †$ pg_dumpall -g > dump.global.`date +%Y%m%d` グローバルデータ(グローバルオブジェクト)のみ取得 つまり、ユーザや権限など、DBの中身ではなく外身といった感じ。 pg_dumpからのリストア †バイナリ形式のバックアップからのリストアについて †pg_dumpで取得したバックアップがバイナリ形式の場合はpg_restoreコマンドを使用する必要がある。 1.バックアップを取得する -Fcは上記で既出のため省略 -f:出力するファイルの指定 2.リストア先のDBにリストアするためのDBがあるかを確認する。 3.リストア テキスト形式のバックアップからのリストアについて †pg_dumpで取得したバックアップがテキスト形式の場合はpsqlコマンドを使用する必要がある。 1.バックアップを取得する postgres=# drop database database_name; 2.リストア先のDBにリストアするためのDBがあるかを確認する。 postgres=# \l List of databases Name | Owner | Encoding -----------+----------+---------- test | postgres | UTF8 ここでもし、リストア先のDBがなかった場合は作成する必要がある。 postgres=# create database test; 3.リストアする テーブル単位のバックアップ、リストア †バックアップ †$ pg_dump -d [データベース名] -t [テーブル名] > (出力)ファイル名 リストア †$ psql [データベース名] < (上記で出力した)ファイル名 ※すでにテーブルが存在している場合はスエラーとなるのでテーブルを削除(drop)する必要がある。 # psql |