我正在研究批量插入类,我决定使用准备好的语句将我的行导入数据库。 (数据可以在无效状态下输入,稍后修复,因此通过 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/