postgresql不像mysql备份可以在一句命令中执行

pg数据库只能运行备份命令再输入密码的方式登录备份

以下批处理脚本中,我们通过vbs来完成自动键入密码的交互工作

原设想把所有公用的变量参数提到顶部设置,但是其中有部分不可一用变量就失败,故可以看见下方实现时还是会有具体位置或数据库名出现



echo off

rem 功能:postgresql windows 平台 自动备份脚本


rem 设置pgsql的bin目录
set pgPath= E:/database/postgresql/bin/


rem 设置备份的数据库名
set databasename= dbname



rem 设置备份目录
set backupDir= d:/backup

rem 获取日期
echo %date%
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set Filename=%databasename%_%year%%month%%day%.bak




rem 输出密码脚本,缺点很明显密码暴露 (我找到的自动输入密码的方法)
echo set pws=WScript.CreateObject("WScript.Shell")> d:/backup/pws.vbs


echo pws.SendKeys " asdf1234 {ENTER}">> d:/backup/pws.vbs


rem 执行脚本自动输入密码(我找到的自动输入密码的方法)
wscript d:/backup/pws.vbs&"%pgPath%/pg_dump.exe" -i -h 127.0.0.1 -p 5432 -U postgres -F c -b -v -f "d:/backup/%Filename%" dbname


rem 删除脚本
cd %backupDir%
set delvbs= pws.vbs


echo %backupDir%/pws.vbs
del %delvbs%


rem 将备份文件打包成rar格式,并删除原始备份文件。(确保你已经安装了winrar,如果你没有安装在默认目录,请根据winrar文件的位置修改路径)
rem @if exist d:/backup/"%Dirname%/%Filename%" ("%ProgramFiles%/winrar/winrar" a -df "d:/backup/%Dirname%/%Filename%.rar" "d:/backup/%Dirname%/%Filename%")


echo 开始删除%database%数据库,只保留最近两天
REM ----------------删除前天的数据库,保留最近两天的库


@echo off & setlocal ENABLEEXTENSIONS
call :Date2Day %date:~0,10% sdays

set /a sdays-=2
call :Day2Date %sdays% difdate


echo.&echo.
echo %difdate%


set yy=%difdate:~0,4%
set mm=%difdate:~5,2%
set dd=%difdate:~8,2%




set delfilename=%databasename%_%yy%%mm%%dd%.bak
echo delete file %delfilename%
cd %backupDir%
del %delfilename%








:Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
set yy=%%a & set mm=%%b & set dd=%%c
)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %2=%j%&goto :EOF



:Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF


@echo on






标红为需要根据实际环境修改的,最下方为两个函数

更多相关文章

  1. 记一次无备份恢复Mysql误删用户数据
  2. 查看 SQL Server 作业(job)运行结果状态脚本
  3. linux ,cron定时任务 备份mysql数据库
  4. SQL 日志太大,脚本清除
  5. mysql数据备份恢复和导入
  6. PowerDesigner 生成SQL Server 2005 注释脚本
  7. 使用sqoop从mysql往hive中增量导数据shell脚本
  8. SQL SERVER 2005 数据库对比工具,并自动生成更新SQL脚本
  9. 添加脚本到Android应用程序

随机推荐

  1. html2canvas 识别 svg 解决方案
  2. 你所不知道的html5与html中的那些事(一)
  3. 为什么2012年HTML5发展远未达预期
  4. 在HTML标签中显示很长一段文字,显示两行,多
  5. HTML中图片的截取一部分显示
  6. 问一个高深的问题,静态html页面如何接收来
  7. KeyPress或KeyDown事件没有得到html元素
  8. 在h:inputTextarea中阻止Html标记
  9. jquery入门-$.each 数组操作与表单操作代
  10. 穹顶之下-善恶是非谁来负责