【发布时间】:2021-11-24 23:17:27
【问题描述】:
我想制作一个批处理文件,该文件将从目录中的 .SQL 脚本获取查询并以 .csv 格式导出结果。我需要连接到 Postgres 服务器。
所以我正在尝试使用该答案https://stackoverflow.com/a/39049102/9631920 来做到这一点。 我的档案:
#!/bin/bash
# sql_to_csv.sh
echo test1
CONN="psql -U my_user -d my_db -h host -port"
QUERY="$(sed 's/;//g;/^--/ d;s/--.*//g;' 'folder/folder/folder/file.sql' | tr '\n' ' ')"
echo test2
echo "$QUERY"
echo test3
echo "\\copy ($QUERY) to 'folder/folder/folder/file.csv' with csv header" | $CONN > /dev/null
echo query in progress
它显示来自查询和 test3 的脚本,然后停止。我做错了什么?
编辑。 我的档案:
#!/bin/bash
PSQL = "psql -h 250.250.250.250 -p 5432 -U user -d test"
${PSQL} << OMG2
CREATE TEMP VIEW xyz AS
`cat C:\Users\test\Documents\my_query.sql`
;
\copy (select * from xyz) TO 'C:\Users\test\Documents\res.csv';
OMG2
但它没有询问密码,也没有得到任何结果文件
【问题讨论】:
-
它现在正在读取和创建结果文件。但是结果文件是空的。不明白为什么,尝试了 3 个不同的脚本
-
folder/folder/folder/file.sql中有什么内容?只有一个查询? -
复杂单选查询
-
把它放到一个 TEMP 视图中并 `\copy (select * from the_view) TO 'the_file.csv'; (无需删除 cmets,或将所有内容放在一行中!)
-
所以我需要为每个脚本创建临时视图?我认为这是不可能的,因为每次我都需要一个新的脚本来完成
标签: postgresql bash psql