ruby-on-rails - 如何使用准备好的语句插入多行

标签 ruby-on-rails postgresql

我正在研究批量插入类,我决定使用准备好的语句将我的行导入数据库。 (数据可以在无效状态下输入,稍后修复,因此通过 ActiveRecord 没有意义)。

要一次插入一行,我可以这样做:

@@connection.prepare('insert_foos', <<-SQL.strip_heredoc
    INSERT INTO foos (number, registration_date, record_id)
    VALUES ($1, $2, $3)
    RETURNING id
  SQL
)

然后,插入:

@@connection.exec_prepared('insert_foos', [record[:number], reg_date, record[:id])

但是,如果我可以聚合一组要插入的行,然后使用一个 exec_prepared 调用将它们全部插入,那就更好了。针对 PHP 提出了类似的问题,建议动态准备语句以支持所需的记录数,但我宁愿准备一次语句。这可能吗?

最佳答案

您可以将多行传递给 values 子句:

VALUES ($1, $2, $3), ($4, $5, $6)

请注意,RETURNING id 现在将返回两行而不是一行。

关于ruby-on-rails - 如何使用准备好的语句插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337964/

相关文章:

ruby-on-rails - 耐嚼 gem -查询以获取包含特定日期的日期范围

ruby-on-rails - Active Record 与条件参数连接

sql - Rails has_many 关联记录满足条件

c - 调试将 SIGINT 与 gdb 结合使用的程序

ruby-on-rails - Rails 列迁移中的 `index` 选项是否有效?

SQL按同一列中的多个项目进行过滤

ruby-on-rails - 如何在异常/完成时在 Rails 控制台中发出警报

ruby-on-rails - 子文件夹中的 nginx Assets

ruby-on-rails - 即时投递的 ActionMailer 配置是什么?

postgresql - 在 centos docker 图像上初始化 postgres 失败,无法获得 D-Bus 连接 : Operation not permitted