java - ProcessBuilder 不在服务器上创建文件

标签 java processbuilder

我正在使用进程生成器从 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 身份运行也是如此。

本地工作正常。但是当在服务器内运行时,命令不会运行。 问题出在哪里?

最佳答案

我已经解决了这个问题。

只需删除“-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'

关于java - ProcessBuilder 不在服务器上创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915404/

相关文章:

java - 将 ArrayList 添加到 ArrayList 的 ArrayList 时遇到问题

java - 使用 ProcessBuilder 打开 Windows 文件资源管理器并突出显示文件时如何输入转义序列?

java - 如何判断系统属性是否来自人工运算符(operator),而不是默认设置?

java - Processbuilder 在执行批处理脚本时挂起

java - 什么会导致 Java 在 System.exit() 之后继续运行?

java - 在客户端和服务器端使用相同的私钥进行 SSL 连接

java - 如何在 list 文件中指定依赖项,然后将其包含到我的 .jar 文件中?

java - 为什么 org.eclipse.egit.github.core API 上的字段 "language"返回 null 到所有存储库?

java - 无需 DB 即可启动 Java/Play2.5 REST API

java - 从 jar 运行 jar