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

 ■ はじめに

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

バックアップ・リストア ~ pg_dump / pg_restore ~
https://dk521123.hatenablog.com/entry/2015/04/22/232655

目次

【1】実行環境
【2】バックアップ用のシェルスクリプト
【3】インポート用のシェルスクリプト
【4】トラブル
 1)エラー「対向(peer)認証に失敗しました」が表示

 【1】実行環境

 * OS : Debian8
 * DB : PostgreSQL v9.4.15

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

 【2】バックアップ用のシェルスクリプト

* 第一引数:出力するディレクトリ

【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

 【3】インポート用のシェルスクリプト

【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'

 【4】トラブル

 1)エラー「対向(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

 関連記事

ER図生成ツール ~ SchemaSpy ~
https://dk521123.hatenablog.com/entry/2023/06/29/234745
バックアップ・リストア ~ pg_dump / pg_restore ~
https://dk521123.hatenablog.com/entry/2015/04/22/232655
 【Linux】【シェル】【MySQLMySQLの全DBをエクスポート/インポートするスクリプト

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

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