在PostgreSQL

时间:2015-12-11 05:56:42

标签: database postgresql database-backups

我正在寻找一个解决方案 - 一个脚本,用于自动化在PostgreSQL中备份数据库的过程。截至目前,我手动执行此操作,即右键单击数据库并单击备份选项。 我做了一些研究,最后得到了一个解决这个问题的脚本,即:

@ECHO OFF
@setlocal enableextensions
@cd /d "%~dp0"

SET PGPATH=C:\PostgreSQL\9.4\bin\
SET SVPATH=d:\
SET PRJDB=Test
SET DBUSR=postgres
FOR /F "TOKENS=1,2,3 DELIMS=/ " %%i IN ('DATE /T') DO SET d=%%i-%%j-%%k
FOR /F "TOKENS=1,2,3 DELIMS=: " %%i IN ('TIME /T') DO SET t=%%i%%j%%k

SET pg_dump=%PRJDB%_%d%_%t%.backup
@ECHO OFF
%PGPATH%pg_dump -h localhost -p 5432 -U postgres %PRJDB% > %SVPATH%%pg_dump%

echo Backup Taken Complete %SVPATH%%pg_dump%
pause 

它确实需要备份,但生成的文件是一个sql文件,但我确实将扩展名更改为.backup。因此,如果我需要还原数据库,并尝试从生成的文件还原,则无法进行。有人可以请我解决这个问题。 提前致谢。

2 个答案:

答案 0 :(得分:3)

以下脚本可用于获取.backup扩展名

的Postgres备份
 @echo off
       for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
         set dow=%%i
         set month=%%j
         set day=%%k
         set year=%%l
       )
       set datestr=%day%_%month%_%year%
       echo datestr is %datestr%

       set BACKUP_FILE=C:\Users\slan\Desktop\backup_test\DBNAME_%datestr%.backup
       echo backup file name is %BACKUP_FILE%
       SET PGPASSWORD=YOUR_PASSWORD
       echo on
       bin\pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v -f %BACKUP_FILE% YOUR_DB_NAME

你必须拥有PostgreSQL的bin文件夹(例如C:\PostgreSQL\9.4\bin)以及此脚本,否则这将无法正常工作

要安排任务,您可以使用Windows任务计划程序,这里有一个示例如何? - How to schedule a Batch File to run automatically in Windows 10 / 8 / 7

答案 1 :(得分:0)

您可以使用PGagent计划批处理,它比Windows Scheduler bat脚本具有多个优势