Sat*_*ish 1 java postgresql runtime.exec
我使用以下代码使用java恢复PostgreSQL数据库
Runtime r = Runtime.getRuntime();
Process p;
String cmd ="D:/Program Files/PostgreSQL/9.1/bin/pg_restore.exe --host localhost --port 5432 --username postgres --dbname mytestqq --role postgres --no-password --verbose D:\sathish\rawDatabase.backup";
p = r.exec(cmd);
Run Code Online (Sandbox Code Playgroud)
我在rawDatabase.backup文件中有42个表,但只有一个表正在恢复,为什么其余的表没有发生我的代码中的错误?提前致谢!!!!
令人惊讶的是,您显示的命令完全起作用,因为您未能引用命令路径中的空格.尝试:
String[] cmd = {
"D:\\Program Files\\PostgreSQL\\9.1\\bin\\pg_restore.exe",
"--host", "localhost",
"--port", "5432",
"--username", "postgres",
"--dbname", "mytestqq",
"--role", "postgres",
"--no-password",
"--verbose",
"D:\\sathish\\rawDatabase.backup"
};
p = r.exec(cmd);
Run Code Online (Sandbox Code Playgroud)
变化:
exec调用;rawDatabase由于原始命令无法转义反斜杠,因此路径中的反斜杠加倍,因此\r字符串中的回车符而不是\char后跟rchar.还要检查进程的返回状态.Process.waitFor()一旦退出使用Process.exitValue(),您必须使用它来确定结果.您应该检查Process对象捕获的stderr和stdout 是否存在错误和日志记录信息.
你的程序继续不工作的原因可能是因为:
pg_restore过程挂着锁; 和/或pg_restore耗尽缓冲的管道空间并阻止在输出流上写入.如果这都将是简单得多的使用ProcessBuilder代替.ProcessBuilder允许您提供文件流以将输出写入,并且通常会为您处理大量此类操作.您仍然必须等待进程终止并检查其返回代码.
| 归档时间: |
|
| 查看次数: |
6422 次 |
| 最近记录: |