从 java 调用 pg_dump 时命令行参数过多

Too many command-line arguments when calling pg_dump from java

在 运行 遇到关于在 Java for postgres 中将一些查询作为字符串执行的问题后,我开始使用字符串数组,这解决了我现有的问题。

切换后,我现在遇到了 pg_dump 的问题,但 pg_restore 没有。

当我为我的方法提供以下数组时:

[time, ./pg_dump, -U, lehigh, -d, lehigh, -Fc, data/completedDb.dump]

我收到以下错误:

pg_dump: too many command-line arguments (first is "data/completedDb.dump")

ProcessBuilder 为我的执行生成以下内容:

time ./pg_dump -U lehigh -d lehigh -Fc data/completedDb.dump

当我在命令行上添加输出箭头并删除数据文件夹时,它工作正常。

time ./pg_dump -U lehigh -d lehigh -Fc > completedDb.dump

我 运行 通过 eclipse,在 Java 的 postgres 数据库中,使用 :

 Runtime.getRuntime().exec();

我试过使用 Process.start() 但得到了同样的错误,所以我对我做错的事情感到完全傻眼。

在此更改之前,pg_dump 作为单个字符串正确执行。我不想回到那种方法,因为我想保持一致性,但我也想弄清楚我在这里做错了什么。

您应该在输出文件名前使用 -f,因为默认情况下 pg_dump 输出到标准输出。

尝试

[time, ./pg_dump, -U, lehigh, -d, lehigh, -Fc, -f, data/completedDb.dump]