【Shell】【PostgreSQL】PostgreSQLをエクスポート/インポートするスクリプト

 ■ はじめに

pg_dumpall or pg_dump / pg_restore を使う。
pg_dumpall / pg_dump / pg_restore については、以下の関連記事を参照のこと。 

 ■ 実行環境

 * OS : Debian8
 * DB : PostgreSQL v9.4.15

 詳しい設定については、以下の関連記事を参照のこと。

 ■ バックアップ用のシェルスクリプト

【pg_dumpallを使ったシェル】 postgresql-dumpall-export.sh

#!/bin/bash

echo "Starting DB dump! $(date '+%Y-%m-%d %H:%M:%S')"

if [ $# -ne 1 ]; then
        echo "$(basename $0) </path/to/dump/dir>"
        exit 1
fi

dump_dir=$1
mkdir -p $dump_dir
chown $DB_USER:$DB_USER $dump_dir

su -u $DB_USER -c "pg_dumpall -U postgres -c > ${dump_dir}/backup_pg_dumpall.sql"

echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"

pg_dumpを使ったシェル】 postgresql-dump-export.sh

#!/bin/bash

if [ $# -ne 1 ]; then
        echo "$(basename $0) </path/to/dump/dir>"
        exit 1
fi

echo "Starting DB dump! $(date '+%Y-%m-%d %H:%M:%S')"

# Auth
DB_USER="postgres";

dump_dir=$1
mkdir -p $dump_dir
chown $DB_USER:$DB_USER $dump_dir

databases=$(su -l $DB_USER -c "psql -U $DB_USER -t -c 'select datname from pg_database'");

for database in ${databases};
do
        if [ "${database}" = "template0" -o "${database}" = "template1" -o "${database}" = "postgres" ]; then
                echo "Skip ${database}."
        else
                echo "Dumping ${database}..."
                su -l $DB_USER -c "pg_dump -b -Ft -U $DB_USER ${database} > ${dump_dir}/${database}.dump";

        fi
done;

echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"

 実行

とりあえず、テストのために単体で実行してみる 
sudo sh postgresql-dumpall-export.sh /tmp/db

 ■ インポート用のシェルスクリプト

【pg_dumpallを使った際】 postgresql-dumpall-import.sh

#!/bin/bash

echo "Starting DB dump import! $(date '+%Y-%m-%d %H:%M:%S')"

# Auth
DB_USER="postgres";

if [ $# -ne 1 ]; then
        echo "$(basename $0) </path/to/dump/file>"
        exit 1
fi

dump_file=$1

psql -d postgres -f ${dump_file}

echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"

pg_dumpを使った際】 postgresql-dump-import.sh

 実行

とりあえず、テストのために単体で実行してみる 
sudo su postgres -c 'sh postgresql-import.sh /tmp/db/backup_pg_dumpall.sql'

 ■ トラブル

 エラー「対向(peer)認証に失敗しました」が表示

シェルスクリプトを実行時に、
エラー「psql: FATAL:  ユーザ "postgres" で対向(peer)認証に失敗しました」が表示

解決策

sudo su postgres -c '【実行するコマンド】'

sudo su postgres -c 'sh postgresql-dump-export.sh /tmp/db'

参考文献

https://qiita.com/tomlla/items/9fa2feab1b9bd8749584

 参考文献

https://qiita.com/mint/items/83213bb60827f26a9cb1

 関連記事

 PostgreSQL】データのバックアップ・復元(リストア) ~ pg_dump / pg_restore ~

 【Linux】【シェル】【MySQLMySQLの全DBをエクスポート/インポートするスクリプト

 PostgreSQL のインストールおよび設定 ~ Debian編 ~

 【Linux】 cronデーモン / crontabコマンド