【问题标题】:Converting query result into CSV将查询结果转换为 CSV
【发布时间】:2016-04-14 22:05:15
【问题描述】:

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

【问题讨论】:

    标签: postgresql csv jdbc dropwizard jdbi


    【解决方案1】:

    使用COPY TO

    COPY (SELECT ... ) TO '/path/to/myfile1.csv' FORMAT csv;
    

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

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

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

    要在您的客户端上写入文件(可以与数据库服务器分开),请使用封装相同功能的元命令\copy of psql。这是not require superuser privileges:

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

    详情:

    【讨论】:

    • 或者,您可以使用 CSVWriter (OpenCsv) 来编写它。这样做,下次您需要切换数据库解决方案时,您的应用程序不会中断(希望如此)
    • 由于超级用户权限要求,我无法使用COPY。我们正在使用具有CsvResultSetWriter 的 SuperCSV。但是,不确定如何实现这一点,因为我的实际查询结果是来自几个表的列集,我不必有 @RegisterMapper 类,我也没有。
    • @Nikki: \copy 的 psql 不需要超级用户权限。考虑添加细节。
    • @Nikki 我会让查询返回一个对象。我觉得直接从数据库将文件写入磁盘的应用程序调用是一种奇怪的方法。然后执行我的调用并使用普通的 CSVWriter 写入文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 2019-12-29
    • 2012-07-05
    • 2015-10-30
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多