为了账号安全,请及时绑定邮箱和手机立即绑定

ProcessBuilder 不在服务器上创建文件

ProcessBuilder 不在服务器上创建文件

万千封印 2023-07-28 10:21:22
我正在使用进程生成器从 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.本地工作正常。但是当在服务器内运行时,命令不会运行。问题出在哪里?
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

我已经解决了这个问题。

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



查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信