阐述下背景:
最近公司项目中有个功能模块,需要 使用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 数据库的定时备份