Ruby on rails 从数据库服务器获取文件

Ruby on rails 从数据库服务器获取文件,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我正在构建一个项目,其中前端是react,后端是rubyonrails,并使用postgres数据库。所需的功能是用户能够导出大型数据集 我有以下创建CSV并将其存储在数据库服务器上的代码片段 query = <<-SQL COPY (SELECT * FROM ORDERS WHERE ORDERS.STORE_ID = ? OFFSET ? LIMIT ?) to '/temp/out.txt' WITH CSV HEADER SQL query_result = Ord

我正在构建一个项目,其中前端是
react
,后端是
rubyonrails
,并使用postgres数据库。所需的功能是用户能够导出大型数据集

我有以下创建CSV并将其存储在数据库服务器上的代码片段

query = <<-SQL
    COPY (SELECT * FROM ORDERS WHERE ORDERS.STORE_ID = ? OFFSET ? LIMIT ?) to '/temp/out.txt' WITH CSV HEADER
SQL
query_result = Order.find_by_sql([query, store_id.to_i, offset.to_i, 1000000])

query=您的方法有两个问题:

  • COPY
    不支持参数,因此必须在客户端构造完整的查询字符串(注意SQL注入)

  • 复制。。。“归档”
    需要超级用户权限或
    pg\u write\u server\u files
    角色的成员资格

    甚至不要考虑以超级用户的身份运行应用程序

    即使没有这一点,允许客户端代码在数据库服务器上创建文件也会增加整个文件系统被拒绝服务的风险


  • 我认为整个想法构思不周。如果您有一个较大的查询结果,如果中间结果不适合内存,数据库服务器将自动使用临时文件。保持简单。

    您能为导出大型数据集提供更好的解决方案吗?只需运行一个简单的
    选择
    。结果流式传输到客户端。OP要求导出一百万条记录到CSV。您是否建议让前端(react)处理csv文件的创建?@jim是的。这是一个问题吗?@LaurenzAlbe如果前端需要将超过一百万行转换为csv,效率不是会降低吗?此外,它可能无法在较旧的浏览器上工作