我正在处理批量插入类,我决定使用预准备语句将我的行导入数据库。 (数据可以输入无效状态,稍后修复,因此通过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也提出了类似的问题,建议动态地准备语句以支持所需的记录数量,但我宁愿准备一次语句。这可能吗?
答案 0 :(得分:0)
您可以将多行传递给values
子句:
VALUES ($1, $2, $3), ($4, $5, $6)
请注意,RETURNING id
现在将返回两行而不是一行。