我正在使用進(jìn)程生成器從 postgres 運(yùn)行psql命令來調(diào)用copy命令來導(dǎo)出一些表。我的工作流程如下: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不是在服務(wù)器中創(chuàng)建的,即使作為root.本地工作正常。但是當(dāng)在服務(wù)器內(nèi)運(yùn)行時(shí),命令不會(huì)運(yùn)行。問題出在哪里?
1 回答

智慧大石
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
我已經(jīng)解決了這個(gè)問題。
只需刪除“-c”參數(shù)的引號(hào),即不轉(zhuǎn)義最終字符串。
反而:
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'
添加回答
舉報(bào)
0/150
提交
取消