Postgresql 将查询结果转换为CSV

Postgresql 将查询结果转换为CSV,postgresql,csv,jdbc,dropwizard,jdbi,Postgresql,Csv,Jdbc,Dropwizard,Jdbi,我有一个JDBI查询,它从我需要写入CSV文件的几个表中返回许多列。我怎样才能做到这一点?我有一个REST端点,它接收搜索条件的POST,我正在使用它构造一个针对Postgres数据库的查询。我正在使用Dropwizard和JDBI。使用 如果要写入文件,则需要超级用户权限 COPY仅允许数据库超级用户命名文件或命令, 因为它允许读取或写入服务器拥有的任何文件 访问权限 或者,您可以直接将输出发送到STDOUT,而无需保存到文件(可能无需超级用户权限!) 要在客户机上写入文件(可以独立于DB服务

我有一个JDBI查询,它从我需要写入CSV文件的几个表中返回许多列。我怎样才能做到这一点?我有一个REST端点,它接收搜索条件的POST,我正在使用它构造一个针对Postgres数据库的查询。我正在使用Dropwizard和JDBI。

使用

如果要写入文件,则需要超级用户权限

COPY
仅允许数据库超级用户命名文件或命令, 因为它允许读取或写入服务器拥有的任何文件 访问权限

或者,您可以直接将输出发送到
STDOUT
,而无需保存到文件(可能无需超级用户权限!)

要在客户机上写入文件(可以独立于DB服务器,也可以不独立于DB服务器),请使用封装相同功能的meta命令。这是:

这意味着文件可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要SQL超级用户权限

详情:


或者,您可以使用CSVWriter(OpenCsv)编写此文件。这样做,下次您需要切换数据库解决方案时,您的应用程序将不会中断(希望如此)。由于超级用户权限要求,我无法使用
复制。我们使用的超级SV具有
CsvResultSetWriter
。但是,我不知道如何实现这一点,因为我的实际查询结果是来自少数几个表的一组列,我不必有
@RegisterMapper
类,也没有一个类。@Nikki:
\copy
的psql不需要超级用户权限。考虑添加的细节。@尼基,我会让查询返回一个对象。我觉得应用程序调用直接从DB将文件写入磁盘是一种奇怪的方法。然后执行我的调用并使用普通的CSVWriter编写文件
COPY (SELECT ... ) TO '/path/to/myfile1.csv' FORMAT csv;