【发布时间】:2016-04-14 22:05:15
【问题描述】:
我有一个 JDBI 查询,它从我需要写入 CSV 文件的几个表中返回许多列。我怎样才能做到这一点?我有一个 REST 端点,它接收搜索条件的 POST,我正在使用它构建一个查询来触发 Postgres 数据库。我正在使用 Dropwizard 和 JDBI。
【问题讨论】:
标签: postgresql csv jdbc dropwizard jdbi
我有一个 JDBI 查询,它从我需要写入 CSV 文件的几个表中返回许多列。我怎样才能做到这一点?我有一个 REST 端点,它接收搜索条件的 POST,我正在使用它构建一个查询来触发 Postgres 数据库。我正在使用 Dropwizard 和 JDBI。
【问题讨论】:
标签: postgresql csv jdbc dropwizard jdbi
使用COPY TO。
COPY (SELECT ... ) TO '/path/to/myfile1.csv' FORMAT csv;
如果要写入文件,则需要超级用户权限。 The manual:
COPY命名文件或命令只允许数据库超级用户使用, 因为它允许读取或写入服务器拥有的任何文件 访问权限。
或者您可以直接将输出发送到STDOUT,而不保存到文件中(可能没有超级用户权限!)。
要在您的客户端上写入文件(可以与数据库服务器分开),请使用封装相同功能的元命令\copy of psql。这是not require superuser privileges:
这意味着文件可访问性和权限是本地用户的,而不是服务器的,并且不需要 SQL 超级用户权限。
详情:
【讨论】:
COPY。我们正在使用具有CsvResultSetWriter 的 SuperCSV。但是,不确定如何实现这一点,因为我的实际查询结果是来自几个表的列集,我不必有 @RegisterMapper 类,我也没有。
\copy 的 psql 不需要超级用户权限。考虑添加细节。