阐述下背景:
最近公司项目中有个功能模块,需要
使用java实现pgsql数据库整库的数据备份
,没有pgsql使用经验的我,在网上寻找了好多大神的帖子,也没发现适合自己当前场景的解决方案,但是我把大神们的帖子按照自己的思路,整合了一下,最终终于解决了,一身轻松呀,也许这就是翻越一座困难大山后的愉悦感,只能说是很爽,坚持就是胜利。
先捋一下思路吧:
1、找到合适的备份命令:
pg_dump -h localhost -U postgres mbssdbnew > E:\postgres_db.sql
2、发现在pgsql安装路径的bin目录下cmd执行上面命令,发现需要输入密码

3、输入密码后可以成功备份,如下图


4、但问题来了,pg_dump命令不支持输入密码,我们在java程序里面如何实现免密备份呢?我也找了好多博主的帖子,没有发现在java执行命令里面输入密码完成备份的案例。但是发现还有另外一种方式可以实现免密方式,那就是通过配置文件.pgpass的方式实现,网上的帖子大多都是linux环境里如何操作配置文件的,我想法找到了windows中.pgpass的存在形态为:
以win10为例,文件路径为:
C:\Users\用户名\AppData\Roaming\postgresql\pgpass.conf,如下图:

在Roaming目录下新建postgresql目录,并新建pgpass.conf配置文件,将要免密备份的数据库信息放到其中:
localhost:5432:需要备份的数据库:用户名:你的密码
5、建好配置文件后,无需重启数据库,直接上代码,发现备份成功!豁然开朗呀老铁。代码拿去不谢。
public static void main(String[] args) throws IOException {
List<String> command = new ArrayList<String>();
command.add("D:\\dev_tools\\postgresql\\bin\\pg_dump");
command.add("-h");
command.add("localhost");
command.add("-U");
command.add("postgres");
command.add("-d");
command.add("mbssdbnew");
command.add("-f");
command.add("E:\postgres_db.sql");
try {
ProcessBuilder pb = new ProcessBuilder(command).redirectErrorStream(true);
Process process = pb.start();
BufferedReader r = new BufferedReader(
new InputStreamReader(process.getInputStream(), "gbk"));
String line = r.readLine();
while (line != null) {
System.err.println(line);
line = r.readLine();
r.close();
} catch (Exception e) {
e.printStackTrace();
最后每日一语:但行好事,莫问前程。
驱动程序包名:ojdbc14.jar
驱动类的名字:oracle.jdbc.driver.OracleDriver
JDBC URL:jdbc:oracle:thin:@dbip:port:databasename
说明:驱动程序包名有可能会变
JDBC URL中各个部分含义如下:
dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。
port –为数据库的监听端口,需要看安装时的配置,缺省为1521。
databasename –为数据库的SID,通常为全局数据库的名字。
SQL Server数据库:
驱动程序包名:msbase.jar mssqlserver.jar msutil.jar
驱动类的名字:com.microsoft.jdbc.sqlserver.SQLServerDriver
JDBC URL:jdbc:microsoft:sqlserver://dbip:port;DatabaseName=databasename
说明:驱动程序包名有可能会变
JDBC URL中各个部分含义如下:
dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。
port –为数据库的监听端口,需要看安装时的配置,缺省为1433。
databasename –数据库的名字。
MySQL数据库:
驱动程序包名:mysql-connector-Java-3.1.11-bin.jar
驱动类的名字:com.mysql.jdbc.Driver
JDBC URL:jdbc:mysql://dbip:port/databasename
说明:驱动程序包名有可能会变
JDBC URL其中各个部分含义如下:
dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。
port –为数据库的监听端口,需要看安装时的配置,缺省为3306。
databasename –数据库的名字。
--在 192.168.1.26 连接数据库Mydb, 弹出密码提示
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres
Password for user postgres:
方法一:设置环境变量 PGPASSWORD
PGPASSWORD 是 Po...
PostgreSQL 数据库可以使用操作系统自带的定时任务工具来实现定时备份,以下是一种简单的备份方案:
1. 创建备份脚本,例如 `pg_backup.sh`,并在其中添加以下内容:
#!/bin/bash
# 定义备份文件名和路径
BACKUP_FILE="/path/to/backup/directory/backup_$(date +%Y%m%d%H%M%S).sql"
# 执行备份命令
pg_dump -U username -h hostname -p portnumber dbname > $BACKUP_FILE
# 压缩备份文件
gzip $BACKUP_FILE
上述脚本将会使用 `pg_dump` 命令备份数据库,并将备份文件以当前时间戳命名并保存到指定目录下,并使用 gzip 压缩备份文件。
2. 将备份脚本添加到定时任务中,例如每天凌晨 2 点执行备份:
0 2 * * * sh /path/to/pg_backup.sh
上述命令将会在每天凌晨 2 点执行 `/path/to/pg_backup.sh` 脚本。
注意:在添加定时任务之前,需要确保备份脚本具有执行权限,可以使用 `chmod +x /path/to/pg_backup.sh` 命令为脚本添加执行权限。
通过以上步骤,即可实现 PostgreSQL 数据库的定时备份。