バッチファイルでPostgreSQLデータベースをバックアップしたい話


環境:Windows10 Pro 1909, PostgreSQL10.0

  • やりたいこと

 実行するだけでdumpファイルをとりたい。

 何度実行しても問題がないようにしたい。

  • 実際のバッチファイル

※ DB接続情報は実際の環境に合わせて書き換える前提

REM //戻り値
SET C_OKRET=0
SET C_NGRET=1

REM //DB接続情報
SET PGHOST=localhost
SET PGPORT=5432
SET PGDATABASE=dbname
SET PGUSER=dbuser

REM //バックアップディレクトリ設定(カレントディレクトリ)
SET BACKUP_DIR=%~dp0

REM //日付情報(バックアップディレクトリに付与する年月日時分秒を取得)
SET TMPTIME1=%TIME: =0%
SET TMPTIME2=%TMPTIME1:.=%
SET NOWTIME=%TMPTIME2::=%
SET NOW=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%NOWTIME:~0,6%

PUSHD %~DP0

REM //タイムスタンプのあるフォルダの作成
MKDIR %BACKUP_DIR%\%NOW%

REM //バックアップ実行
pg_dump -h %PGHOST% -U postgres -c %PGDATABASE% > %BACKUP_DIR%\%NOW%\%PGDATABASE%.dump


REM //エラー発生時はカレントディレクトリにログを出力
IF %errorlevel% neq 0 (

  ECHO %date% %time:~0,8% 実行に失敗しました  ErrorCode=%errorlevel%^
  FileName%SQLFILE%>> %~DP0\psql_log.txt
  POPD
  EXIT /b %C_NGRET%

) ELSE (

  POPD
  EXIT /b %C_OKRET%

)

バッチファイルの終了を「EXIT /b ~」とすることで、呼び出し元へステータスを返せるように指定。

なお、返り値は数値であることに注意。