我正在编写一个从AWS S3获取数据(.csv文件)的shell脚本,将其本地下载到EC2 Linux AMI实例上,然后将数据复制到RDS PostGresql数据库。
我的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的数据时,我将文件的名称存储在FILE变量中(它是文件夹中的唯一文件,数据库查询后将删除该文件夹)。
我收到以下错误消息:
./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 :(得分:1)
在第
行PARAMETERFORDB= "'\\COPY table(x,y) FROM ''$FILE'' CSV HEADER'"
删除=
后的空格并删除一级单引号:
PARAMETERFORDB="\\COPY table(x,y) FROM '$FILE' CSV HEADER"
在调用psql
的行中,将${PARAMETERFORDB}
括在双引号中,因为它包含空格。