我如何使用ExpectJ在Java中调用pg_dump(在PostgreSQL 8.4上)?

时间:2010-07-22 21:29:35

标签: java postgresql expect expectj

我已经在很多地方看到过这个问题,也就是说从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由于某种原因没有收到提示。

非常感谢任何帮助。

谢谢, 马特

1 个答案:

答案 0 :(得分:1)

我非常确定一种更简单的方法,不需要使用expect和send,而是通过.pgpass file。也在pg_dump docs

中引用