ProcessBuilder 不在服务器上创建文件
ProcessBuilder doesn't create file on server
我正在使用进程构建器从 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;
以下命令将在该命令中打开最终命令:
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
。
本地工作正常。但是当 运行 在服务器中时,命令不会 运行s。
问题在哪里?
我已经解决了这个问题。
只需去掉“-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'
我正在使用进程构建器从 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;
以下命令将在该命令中打开最终命令:
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
。
本地工作正常。但是当 运行 在服务器中时,命令不会 运行s。 问题在哪里?
我已经解决了这个问题。
只需去掉“-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'