java 实现pgsql数据库免密备份 Windows版本

文章讲述了在Java项目中使用pg_dump进行pgsql数据库备份时遇到的问题及解决方案。作者通过配置pgpass.conf文件实现了在Windows环境下免密备份,详细介绍了配置过程及Java代码执行备份的步骤。
摘要由CSDN通过智能技术生成

阐述下背景:
最近公司项目中有个功能模块,需要使用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();
        }

    }

最后每日一语:但行好事,莫问前程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值