网上找了好久再加上自己的拼凑整理出了PostgreSQL的windows版本的备份和恢复。具体步骤如下:
一、 备份:
导出命令:pg_dump [OPTION]… [DBNAME]
查看使用帮助:pg_dump –help
主要参数解释:
关键字 | 说明(默认值) |
-h, –host=HOSTNAME | 数据库服务器IP |
-p, –port=PORT | 数据库服务器端口号 |
-U, –username=NAME | 用户名 |
-W, –password | 密码 |
-F, –format=c|t|p | 输出文件格式(custom,tar,plain text) |
-v, –verbose | 详细信息模式,会显示备份时的信息 |
-f, –file=FILENAME | 输出文件名 |
-b, –blobs | 在dump文件中包含大对象 |
写了一个正常运行的备份脚本如下:
@ECHO OFF
@setlocal enableextensions
@cd /d "%~dp0"
::本地的PostgreSQL的路径
SET PGPATH=C:\"Program Files"\PostgreSQL\10\bin\pg_dump.exe
::保存的位置
SET SVPATH=D:\beifen\
::要备份的数据库
SET PRJDB=bpsimple
::数据库用户
SET DBUSR=postgres
::数据库角色
SET DBROLE=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 DBDUMP=%PRJDB%_%d%_%t%.backup
@ECHO OFF
%PGPATH% -h localhost -p 5432 -U %DBUSR% --role %DBROLE% -F c -b -v -f %SVPATH%%DBDUMP% %PRJDB%
echo Backup Taken Complete %SVPATH%%DBDUMP%
pause
运行完上面的脚本之后会提示输入数据库密码,正确输入之后就会生成备份的文件:
如果不输入密码就能做成批处理的文件了。那么要如何做呢,下面就是一个方案:
①新建系统变量:
变量名:PGPASSFILE
变量值:C:\Program Files\PostgreSQL\10\data\pgpass.conf
②按上面的变量值新建文件:pgpass.conf
文件内容格式为:hostname:port:database:username:password
③再输入上面的CMD命令是不是就不会提示密码了?下图是执行生成后的备份文件
这样就可以配合windows的定时执行计划,做到数据库的自动备份。
下面是一个windows的执行计划设置的链接:
https://blog.csdn.net/mao_mao37/article/details/82592603
二、恢复
导出命令:pg_restore [OPTION]… [FILE]
查看使用帮助:pg_restore –help
主要参数解释:
关键字 | 说明(默认值) |
-h, –host=HOSTNAME | 数据库服务器IP |
-p, –port=PORT | 数据库服务器端口号 |
-U, –username=NAME | 用户名 |
-W, –password | 密码 |
-d, –dbname=NAME | 连接的数据库名 |
-v, –verbose | 详细信息模式,会显示恢复时的信息 |
-a, –data-only | 只导入数据,不导入结构 |
-t, –table=NAME | 恢复指定名称的表 |
以下是一个恢复的脚本程序
@ECHO OFF
@setlocal enableextensions
@cd /d "%~dp0"
::要执行的命令
SET PGPATH=C:\"Program Files"\PostgreSQL\10\bin\pg_restore.exe
::要恢复的数据库的备份
SET SVPATH=D:\beifen\bpsimple_2019-07-30_1017.backup
SET PRJDB=bpsimple
SET DBUSR=postgres
@ECHO OFF
%PGPATH% -h localhost -p 5432 -d %PRJDB% -U %DBUSR% %SVPATH%
echo Backup Taken OK %SVPATH%
pause
附录:
恢复整个DB(含有表定义和数据)
C:\Program Files\PostgreSQL\8.1\bin>
pg_restore.exe -h 192.168.1.200 -p 5432 -U system1 -i -d “techpro_db” -c -v “D:\techpro_db.tar”
恢复整个数据库的表定义
C:\Program Files\PostgreSQL\8.1\bin>
pg_restore.exe -h 192.168.1.200 -p 5432 -U system1 -i -d “techpro_db” -c -s -v “D:\techpro_db.tar”
恢复整个数据库表的数据
C:\Program Files\PostgreSQL\8.1\bin>
pg_restore.exe -h 192.168.1.200 -p 5432 -U system1 -i -d “techpro_db” -c -a -v “D:\techpro_db.tar”
恢复某个表的表定义
C:\Program Files\PostgreSQL\8.1\bin>
pg_restore.exe -h 192.168.1.200 -p 5432 -U system1 -i -d “techpro_db” -t t_emp -c -s -v “D:\techpro_db.tar”
恢复某个表的数据
C:\Program Files\PostgreSQL\8.1\bin>
pg_restore.exe -h 192.168.1.200 -p 5432 -U system1 -i -d “techpro_db” -t t_emp -c -a -v “D:\techpro_db.tar”
参考: