PostgreSQL pg_dump

pg_dump によるバックアップ/復元

・全データベース

[user]$ pg_dumpall -U postgres > ファイル名

[user]$ psql -U postgres template1 < ファイル名

・データベース

[user]$ pg_dump -U ユーザー名 データベース名 > ファイル名

[user]$ psql -U ユーザー名 データベース名 < ファイル名

・テーブル

[user]$ pg_dump -U ユーザー名 データベース名 -t テーブル名 > ファイル名

[user]$ psql -U ユーザー名 データベース名 < ファイル名

・定期的なバックアップ実行

実行ユーザーのホームディレクトリに、パスワードを記述したファイル(.pgpass)を用意

[user]$ vim ~/.pgpass

    ホスト名:ポート番号:データベース名:ユーザー名:パスワード(* で省略可能)

    *:*:*:username:password

[user]$ chmod 600 .pgpass

[user]$ vim ~/backup/pg_dump.sh

    #!/bin/sh

    # データベース名
    DB=dbname
    # ユーザー名
    USER=username

    # 保存ディレクトリ
    DIR=${HOME}/backup

    # ファイル名
    FILE="${DB}-`date --date today '+%y%m%d'`"

    # バックアップ
    /usr/local/pgsql/bin/pg_dump  -U  ${USER}  ${DB}  |  gzip  >  ${DIR}/${FILE}.gz

    # ファイルのパーミッション変更
    chmod  600  ${DIR}/${FILE}.gz

[user]$ chmod 700 pg_dump.sh

[user]$ crontab -e

    0  0  *  *  *  ${HOME}/backup/pg_dump.sh

[user]$ ls -lh ~/backup

    -rw------- 1 user user  617K  3月  20  00:00  dbname-150319.gz

復元

[user]$ cd ~/backup

[user]$ gzip -d dbname-150319.gz

[user]$ ls -lh

    -rw------- 1 user user  5.0M  3月  20  00:00  dbname-150319

[user]$ psql -U username dbname < dbname-150319