Psql-读取SQL文件并输出到CSV [英] psql - read SQL file and output to CSV
本文介绍了Psql-读取SQL文件并输出到CSV的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个SQL文件my_query.sql
:
select * from my_table
使用psql
,我可以读入此SQL文件:
i my_query.sql
或将其作为参数传入:
psql -f my_query.sql
我可以将查询字符串的结果输出到CSV:
copy (select * from my_table) to 'output.csv' with csv header
有没有办法将它们组合在一起,以便我可以将查询结果从SQL文件输出到CSV?
推荐答案
遗憾的是,此功能没有内置功能,因此您需要一些bash-fu才能使其正常工作。
CONN="psql -U my_user -d my_db"
QUERY="$(sed 's/;//g;/^--/ d;s/--.*//g;' my_query.sql | tr '
' ' ')"
echo "\copy ($QUERY) to 'out.csv' with CSV HEADER" | $CONN
sed
Fun删除所有分号、注释行和行尾注释,tr
将换行符转换为空格(如@abelisto的评论中所述):
-- my_query.sql
select *
from my_table
where timestamp < current_date -- only want today's records
limit 10;
变为:
select * from my_table where timestamp < current_date limit 10
然后传递给有效的psql
命令:
copy (select * from my_table where timestamp < current_date) to 'out.csv' with csv header
这里有一个脚本:
sql_to_csv.sh
#!/bin/bash
# sql_to_csv.sh
CONN="psql -U my_user -d my_db"
QUERY="$(sed 's/;//g;/^--/ d;s/--.*//g;' $1 | tr '
' ' ')"
echo "$QUERY"
echo "\copy ($QUERY) to '$2' with csv header" | $CONN > /dev/null
./sql_to_csv.sh my_query.sql out.csv
这篇关于Psql-读取SQL文件并输出到CSV的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文