2016-09-16 83 views
0

我正在編寫一個shell腳本,用於從AWS S3獲取數據(.csv文件),將其下載到EC2 Linux AMI實例上,然後將數據複製到RDS PostGresql數據庫。ShellScript的PSQL COPY

我的shell代碼如下:

FILE="$(ls DB)" 
PARAMETERFORDB= "'\\COPY table(x,y) FROM ''$FILE'' CSV HEADER'" 

$(psql --host=XXXXX --port=XXXXX --username=XXXXX --password --dbname=XXXXX -c ${PARAMETERFORDB}) 

所以,當從S3的數據下載,我存儲文件的文件變量中的名字(這是該文件夾中唯一的文件,文件夾在數據庫查詢之後被刪除)。

我獲得以下錯誤信息:

./shellTest.sh: line 21: '\COPY table(x,y) FROM ''14.9.2016.csv'' CSV HEADER': command not found 
psql: option requires an argument -- 'c' 
Try "psql --help" for more information. 

我在做什麼錯?

回答

0

在線路

PARAMETERFORDB= "'\\COPY table(x,y) FROM ''$FILE'' CSV HEADER'" 

刪除空格的=後和除去單引號的一層:

PARAMETERFORDB="\\COPY table(x,y) FROM '$FILE' CSV HEADER" 

在被調用psql行,這是因爲它雙引號括${PARAMETERFORDB}包含空格。

+0

謝謝!現在我得到一個「psql:選項需要一個參數 - 'c'」錯誤...我在傳遞PARAMETERFORDB時做錯了什麼? –

+0

通過編寫--c = $ PARAMETERFORDB修復它!但是,數據庫不更新....雖然命令本身,分開進入終端,工程... –

+0

修改答案。與數據庫問題相比,這更像是一個shell腳本問題。 –