定時バックアップ on Windows

UNIX系OSなら、cronとかでスクリプトを走らせれば良いので簡単です。Windowsの場合のやり方が見つからなかったので、作ってみました。コマンドプロンプトが出るのが気に入らないので、何とかしたいです。

@ITバッチ・ファイル中で日付をファイル名に使用するを参考にしました。

バックアップをずっと保存

@echo off

set day=%date:~0,4%%date:~5,2%%date:~8,2%
"C:\Program Files\PostgreSQL\8.1\bin\pg_dump.exe" -U postgres -F c -f "C:\backup\pg-%day%.backup" postgres

"C:\Program Files\PostgreSQL\8.1\bin\vacuumdb.exe" -U postgres -a -z -q

このバッチファイルを、C:\Program Files\PostgreSQL\taskにでも置いて、スタート→プログラム→アクセサリ→システムツール→タスクに、日単位で03:00くらいで登録。
pg-20060408.backupってファイルにバックアップが取られます。ついでに、VACUUM ANALYZEします。

バックアップを1ヶ月分だけ保存

@echo off

set day=%date:~8,2%
"C:\Program Files\PostgreSQL\8.1\bin\pg_dump.exe" -U postgres -F c -f "C:\backup\pg-%day%.backup" postgres

"C:\Program Files\PostgreSQL\8.1\bin\vacuumdb.exe" -U postgres -a -z -q

pg-08.backupって感じになって先月分の同名ファイルを上書きします。30日の月や2月は来月まで残っちゃうけどね。

バックアップを1週間だけ保存

@echo off

cscript /b "C:\Program Files\PostgreSQL\task\wday.vbs"
if %errorlevel%==7 set day=SAT
if %errorlevel%==6 set day=FRI
if %errorlevel%==5 set day=THU
if %errorlevel%==4 set day=WED
if %errorlevel%==3 set day=TUE
if %errorlevel%==2 set day=MON
if %errorlevel%==1 set day=SUN
"C:\Program Files\PostgreSQL\8.1\bin\pg_dump.exe" -U postgres -F c -f "C:\backup\pg-%day%.backup" postgres

"C:\Program Files\PostgreSQL\8.1\bin\vacuumdb.exe" -U postgres -a -z -q

wday.vbsの内容は、1行だけ。

WScript.Quit(WeekDay(Date))

pg-SAT.backupって感じになって先週分の同名ファイルを上書きします。