我有一张包含 id、name 和复杂查询的表。下面只是该表的一个示例..
ID name Query
1 advisor_1 "Select * from advisor"
2 student_1 "Select * from student where id = 12"
3 faculty_4 "Select * from student where id = 12"
我想遍历这个表并将每条记录保存到 csv 文件中
尽管匿名阻止自动进行,我有什么办法可以做到这一点。我不想手动执行此操作,因为表有很多行。
有人可以帮忙吗?
不是超级用户意味着无法在服务器端 DO 块中完成导出。
它可以用任何可以与数据库对话的编程语言在客户端完成,或者假设只有 psql 环境,可以\copy
使用 SQL 查询生成语句列表。
作为后者的一个例子,假设唯一的输出文件名是从ID
列中构建的,这样的事情应该可以工作:
SELECT format('\copy (%s) TO ''file-%s.csv'' CSV', query, id)
FROM table_with_queries;
这个查询的结果应该以一种可以直接包含在 psql 中的格式放入一个文件中,如下所示:
\pset format unaligned
\pset tuples_only on
-- \g with an argument treats it as an output file.
SELECT format('\copy (%s) TO ''file-%s.csv'' CSV', query, id)
FROM table_with_queries \g /tmp/commands.sql
\i /tmp/commands.sql
作为旁注,该过程无法使用\gexec
PG 9.6 中引入的元命令进行管理,因为\copy
它本身就是一个元命令。\gexec
仅对 SQL 查询进行迭代,而不对元命令进行迭代。否则,整个事情可以通过一次\gexec
调用来完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句