gpt4 book ai didi

postgresql - psql - 读取 SQL 文件并输出到 CSV

转载 作者:行者123 更新时间:2023-11-29 11:41:25 25 4
gpt4 key购买 nike

我有一个 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 '\n' ' ')"

echo "\\copy ($QUERY) to 'out.csv' with CSV HEADER" | $CONN

sed 函数删除所有分号、注释行和行尾注释,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 '\n' ' ')"
echo "$QUERY"

echo "\\copy ($QUERY) to '$2' with csv header" | $CONN > /dev/null

./sql_to_csv.sh my_query.sql out.csv

关于postgresql - psql - 读取 SQL 文件并输出到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39046908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com