我有一个JDBI查询,它从几个表中返回许多列,我需要将这些列写入CSV文件。我怎样才能做到这一点?我有一个REST端点,它接收搜索条件的POST,我正在构建一个查询以触发Postgres数据库。我正在使用Dropwizard和JDBI。
答案 0 :(得分:2)
使用COPY TO
。
COPY (SELECT ... ) TO '/path/to/myfile1.csv' FORMAT csv;
如果要写入文件,则需要超级用户权限。 The manual:
COPY
仅允许数据库超级用户命名文件或命令, 因为它允许读取或写入服务器具有的任何文件 访问权限。
或者您可以直接将输出发送到STDOUT
而不保存到文件(可能没有超级用户权限!)。
要在客户端上编写文件(可以与DB服务器分开),请使用封装相同功能的元命令\copy
of psql。这是not require superuser privileges:
这意味着文件可访问性和权限是本地用户的权限,而不是服务器,并且不需要SQL超级用户权限。
详细说明: