Psql-读取SQL文件并输出到CSV [英] psql - read SQL file and output to CSV

查看:14
本文介绍了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

sedFun删除所有分号、注释行和行尾注释,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆