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

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

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

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

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

final List baseCmds = new ArrayList(); 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 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(); } 

你为什么不用pg_dump ?

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

要备份数据库,您需要将CopyOut从db传输到流,然后使用CopyIn将该进程反转以进行还原。

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

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