簡體   English   中英

如何使用Java創建Postgres數據庫的備份

[英]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.execString[]形式,正如我在有關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 ,以解決這個問題。 使用execString[]形式,您不必這樣做,而且它可以正確處理其他事情,例如路徑中意外的%environmentvars%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM