postgresql windows 自动备份

jopen 9年前

windows下postgresql 自动备份脚本,采用bat批处理脚本编写,windows任务计划定时执行。

每天备份一次,主要采用pg_dump 备份指定库,同时删除 7 天以前的备份文件。

@echo off  @setlocal enableextensions   @cd /d "%~dp0"    set PGHOME="D:\Program Files\PostgreSQL\9.2\bin"    set PGDATA="D:\Program Files\PostgreSQL\9.2\data"  set BACKUP_DIR="E:\lier\backup\test"    set day=%date%  :: 提取日期  for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (      set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100  )  set DATE_1=%sy%-%sm:~-2%-%sd:~-2%  ::echo %DATE_1%  ::pause>nul    :: 7天前  set /a sd-=7   if %sd% leq 0 call :count    set DATE_2=%sy%-%sm:~-2%-%sd:~-2%    if exist %BACKUP_DIR%\db_lier_back_%DATE_2% (del /f %BACKUP_DIR%\db_lier_back_%DATE_2%)     if not exist %BACKUP_DIR%\db_lier_back_%DATE_1% (%PGHOME%\pg_dump.exe -h localhost -p 5432 -U postgres -b -Fp lierserver > %BACKUP_DIR%\db_lier_back_%DATE_1%)    :count  set /a sm-=1  if !sm! equ 0 set /a sm=12, sy-=1  call :days  set /a sd+=days  if %sd% leq 0 goto count  goto :eof    :days  :: 获取指定月份的总天数  set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"  set /a max=28+leap  for /f "tokens=%sm%" %%i in ("31 %max% 31 30 31 30 31 31 30 31 30 31") do set days=%%i  goto :eof
在设置任务计划时,有几个注意点:

1. Task Scheduler系统服务要自动启动

2. 任务计划的执行用户为有密码账户

3. 执行用户为当前系统运行用户,否者pg_dump命令堵塞。这一点谁知道怎么解决