ProcessBuilder不在服务器上创建文件

问题描述 投票:0回答:1

我正在使用流程生成器从postgres运行psql命令来调用copy命令以导出一些表。

我的工作流程如下:

String sql = "\"\\copy ( SELECT * from table ) TO '/folder' DELIMITER '|' NULL '\\N'\";

List<String> commands = new ArrayList<>();
commands.add("sudo");
commands.add("-u");
commands.add("root");
commands.add("psql");
commands.add("-h");
commands.add("host");
commands.add("-U");
commands.add("postgres");
commands.add("-d");
commands.add("database");
commands.add("-c");
commands.add(sql);

ProcessBuilder process = new ProcessBuilder(commands);

Process execution = process.start();
execution.waitFor(); // each calling to export data wait a little to generate next;

以下命令将在该命令中打开final:

sudo -u root psql -h host -U postgres -d database_user -c \copy ( select * from table TO "/folder/file.txt/" DELIMITER '|' NULL '\\N'" )

但是file.txt不是在服务器中创建的,甚至不能以root的身份运行。

本地效果很好。但是当在服务器中运行时,命令不会运行。问题出在哪里?

java processbuilder
1个回答
0
投票

我已经解决了这个问题。

只需删除“ -c”参数的引号,即不对最终字符串进行转义。

代替:

sudo -u root psql -h host -U postgres -d database_user -c \copy "( select * from table TO '/folder/file.txt/') DELIMITER '|' NULL '\\N'

我用过:

sudo -u root psql -h host -U postgres -d database_user -c \copy ( select * from table TO '/folder/file.txt/') DELIMITER '|' NULL '\\N'
© www.soinside.com 2019 - 2024. All rights reserved.