我需要创建一个Linux Shell脚本来运行PostgreSQL SQL查询并以CSV格式导出结果。通过做一些研究,我知道有两种方法可以做到,例如:
使用SQL查询
COPY table_name TO ‘file_name.csv' DELIMITER ',' CSV HEADER;
使用psql
\copy table_name to 'filename.csv’ csv header
我在SQL Server上都尝试过这两种方法,但我发现第一种方法需要管理权限,这是我所不希望的。
我已经尝试了第二种方法,并且也能够将PostgreSQL查询输出写入CSV文件,但是现在我需要从Shell脚本执行此操作,而我面临以下问题。我在脚本中编写如下:
psql -U username -d database -c $'
\copy(WITH var(collectionMonth) as (values(\'$collectionMonth\'))
SELECT CONCAT(var.collectionMonth, LPAD(mfv2.integer_value::text,2,\'0\')) as "collection_date" FROM var,
meta_field_value mfv2 WHERE mfv2.meta_field_name_id=8 TO \'/home/my.csv\' csv HEADER;'
它显示“ \ copy附近的语法错误”。如何解决这个问题?我知道错误是由于\
命令前面的copy
造成的。
答案 0 :(得分:2)
您的报价已关闭。
最好使用“此处的文档”:
psql -U username -d database <<EOF
\copy (WITH var(collectionMonth) as (values('$collectionMonth')) SELECT CONCAT(var.collectionMonth, LPAD(mfv2.integer_value::text,2,'0')) as "collection_date" FROM var, meta_field_value mfv2 WHERE mfv2.meta_field_name_id=8) TO '/home/my.csv' (FORMAT 'csv', HEADER)
EOF