如何使用预准备语句插入多行

时间:2015-12-17 15:15:09

标签: 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也提出了类似的问题,建议动态地准备语句以支持所需的记录数量,但我宁愿准备一次语句。这可能吗?

1 个答案:

答案 0 :(得分:0)

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

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

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