0

我在很多地方都看到过这个问题,也就是说,以编程方式从 PostgreSQL 进行备份的问题。我的解决方案是使用 ExpectJ,但我无法让我的代码正常工作。

我有以下代码:

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 and Settings\bobjonesthe3rd>"C:\Program Files\PostgreSQL\8.4\bin\pg_dump" -h localhost -U myUserName myDB
密码:

所以,我知道它会提示输入密码,但 ExpectJ 出于某种原因没有收到提示。

任何帮助将非常感激。

谢谢,马特

4

1 回答 1

1

我很确定一种更简单的方法是通过.pgpass 文件,无需使用期望和发送。在pg_dump 文档中也有引用。

于 2010-07-23T05:05:06.590 回答