如何通过JDBC从Postgresql-DB进行备份?

时间:2010-09-28 06:42:00

标签: java postgresql jdbc backup

在我们的应用程序中,我们实现了从代码中触发的自动数据库迁移。现在我们要在进行任何迁移之前备份现有的数据库。

任何人都可以解释如何在Java代码中通过JDBC对Postgresql-DB进行完整备份吗?

更新:它不能通过JDBC工作。

这里有一些Frank Heikens响应的工作代码:

    final List<String> baseCmds = new ArrayList<String>();
    baseCmds.add("/usr/bin/pg_dump");
    baseCmds.add("-h");
    baseCmds.add("hostname");
    baseCmds.add("-p");
    baseCmds.add("5432");
    baseCmds.add("-U");
    baseCmds.add("username");
    baseCmds.add("-b");
    baseCmds.add("-v");
    baseCmds.add("-f");
    baseCmds.add("/path/to/backup.sql");
    baseCmds.add("dbName");
    final ProcessBuilder pb = new ProcessBuilder(baseCmds);

    // Set the password
    final Map<String, String> env = pb.environment();
    env.put("PGPASSWORD", "password");

    try {
        final Process process = pb.start();

        final BufferedReader r = new BufferedReader(
                  new InputStreamReader(process.getErrorStream()));
        String line = r.readLine();
        while (line != null) {
            System.err.println(line);
            line = r.readLine();
        }
        r.close();

        final int dcertExitCode = process.waitFor();

     } catch (IOException e) {
        e.printStackTrace();
     } catch (InterruptedException ie) {
        ie.printStackTrace();
     }

3 个答案:

答案 0 :(得分:6)

为什么不使用pg_dump

答案 1 :(得分:3)

Postgresql JDBC库现在支持批量COPY操作。见http://jdbc.postgresql.org/documentation/publicapi/index.html?org/postgresql/copy/CopyManager.html

要备份数据库,您需要从数据库中的CopyOut到流,然后使用CopyIn撤消要恢复的过程。

答案 2 :(得分:0)

我使用DbUnit从我的java应用程序中备份数据库:

  

DbUnit能够将数据库数据导出到XML数据集或从中导入数据库数据。从版本2.0开始,DbUnit在流模式下使用时也可以处理非常大的数据集。