postgresql windows 自动备份

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命令堵塞。这一点谁知道怎么解决

转载于:https://my.oschina.net/congqian/blog/133801

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值