在 Postgres 中导出文件中的数据

马杜拉·马瑟

我有一张包含 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

作为旁注,该过程无法使用\gexecPG 9.6 中引入元命令进行管理,因为\copy它本身就是一个元命令。\gexec仅对 SQL 查询进行迭代,而不对元命令进行迭代。否则,整个事情可以通过一次\gexec调用来完成

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章