我如何使用ExpectJ在Java中调用pg_dump(在PostgreSQL 8.4上)?
我在很多地方都见过这个问题,也就是说,从PostgreSQL以编程方式进行备份的问题。我的解决方案是使用ExpectJ,但我在让代码正常工作方面遇到了困难 我有以下代码:我如何使用ExpectJ在Java中调用pg_dump(在PostgreSQL 8.4上)?,java,postgresql,expect,expectj,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 File
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\U dump”-h localhost-U myUserName myDB密码: 因此,我知道它会提示输入密码,但出于某种原因,ExpectJ没有收到提示 任何帮助都将不胜感激 谢谢,
Matt我很确定,不需要使用expect和send,通过。也在.中引用,我没有访问实际PostgreSql安装的权限,因此使用.pgpass文件不是一个可行的选项。文章中的“localhost”主机只是一个例子。PostgreSQL通常会在另一台机器上运行。然后你会把事情弄得很复杂。如果您连接到的PG版本比您的PG_转储版本更新,则您的备份可能与您预期的不一样。以下是我们的设置:我们有一个使用PostgreSQL作为数据库服务器的桌面应用程序。根据安装程序的要求,用户必须安装PostgreSQL 8.4版。他们给我们服务器名和端口号,我们使用这些信息连接到他们的服务器。在我们的安装中,我们包括一个pg_dump实用程序的副本,并将其与服务器信息结合使用以进行备份。然而,所有这些都是无关紧要的。我的问题不是关于如何进行备份,而是关于如何使用ExpectJ.True,关于您询问ExpectJ,但是.pgpass文件确实存在于客户端而不是服务器上,因此它仍然是一个可行的选项。祝你好运。