[英]how to create backup of postgres database using java
我想使用Java備份postgres數據庫。 我為此使用以下代碼
但這不起作用並且不會生成轉儲。
String pgDump = "C:\\Program Files\\PostgreSQL\\9.2\\bin\\pg_dump";
String dumpFile = "D:\\test\\"+ tenant.getTenantAsTemplate()+".sql";
String sql = pgDump+" -h localhost -U postgres -P postgres " + tenant.getTenantAsTemplate()+" > "+dumpFile;
Process p = Runtime.getRuntime().exec(sql);
int time = p.waitFor();
System.out.println("time is "+time);
if(time == 0){
System.out.println("backup is created");
}
else{
System.out.println("fail to create backup");
}
我在這里得到的時間是1。
這也取決於操作系統 ,我們還需要pg_dump 。 沒有pg_dump,還有其他方法可以生成數據庫備份嗎?
請盡快回復。
不,沒有pg_dump
,就無法使用常規SQL連接生成數據庫備份。 這是一個常見問題解答,但是想要該功能的人從不加緊努力以在PostgreSQL中實現該功能。
從技術上講,我想您可以像pg_basebackup
一樣使用復制連接來進行物理基礎備份,但這並不是您真正想要的,它需要復制計算機上的所有數據庫,並且將需要大量工作。
您應該使用Runtime.exec
的String[]
形式,正如我在有關pg_restore
的相關答案中提到的那樣 。
您還必須檢查進程出口值以查看其是否成功終止,並且必須小心處理(不只是吞下)引發的任何異常。
您的代碼無法檢查退出值,並且我認為它可能正在生成格式錯誤的命令,並以非零退出代碼失敗,這可能是因為您未正確引用pg_dump
的路徑。 要查看出了什么問題,請打印最終的匯編命令行,您將看到類似以下內容的內容:
C:\Program Files\PostgreSQL\9.2\bin\pg_dump -h localhost ....
該cmd.exe將拆分為:
c:\Program
Files\postgresql\9.2\bin\pg_dump
-h
localhost
...等等
看到問題了嗎?
不要只是引用路徑pg_dump
,以解決這個問題。 使用exec
的String[]
形式,您不必這樣做,而且它可以正確處理其他事情,例如路徑中意外的%environmentvars%
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.