0
我在很多地方看到過這個問題,也就是說用PostgreSQL進行編程備份的問題。我的解決方案是使用ExpectJ,但我無法讓我的代碼工作。如何使用ExpectJ在Java中調用pg_dump(在PostgreSQL 8.4上)?
我有以下代碼:
public class BackupUtility
{
public static void main(String[] args)
{
try
{
ExpectJ exp = new ExpectJ(20);
Spawn shell = exp.spawn("\"C:\\Program Files\\PostgreSQL\\8.4\\bin\\pg_dump.exe\" " +
"-h localhost -U myUserName myDB");
shell.expect("Password: ");
shell.send("myPassword");
System.out.println(shell.getCurrentStandardOutContents());
shell.expectClose()
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
然而,在shell.expect線,它的超時。
當我運行在命令提示符下此命令,它看起來像如下:
C:\ Documents和Settings \ bobjonesthe3rd> 「C:\ Program Files文件\的PostgreSQL \ 8.4 \ BIN \ pg_dump的」 -h localhost -U myUserName myDB
密碼:
所以,我知道它提示輸入密碼,但ExpectJ由於某種原因沒有收到提示。
任何幫助將不勝感激。
謝謝, 馬特
我沒有訪問實際的PostgreSql安裝,因此使用.pgpass文件不是一個可行的選項。帖子中的「localhost」主機就是一個例子。 PostgreSQL通常會運行在不同的機器上。 – 2010-07-23 13:56:00
然後你很複雜的事情。如果您連接的PG版本比您的pg_dump更新,您的備份可能不會像您期望的那樣行事。 – rfusca 2010-07-23 14:06:04
這是我們的設置:我們有一個使用PostgreSQL作爲數據庫服務器的桌面應用程序。作爲安裝程序的要求,用戶必須安裝PostgreSQL 8.4。他們給我們的服務器名稱和端口號,我們使用這些信息連接到他們的服務器。在我們的安裝中,我們包含了一個pg_dump實用程序的副本,並將它與其服務器信息一起用於備份。但是,這一切都是無關緊要的。我的問題不是關於如何進行備份,而是關於如何使用ExpectJ。 – 2010-07-23 15:02:25