【问题标题】:node.js and postgres bulk upsert or another pattern?node.js 和 postgres 批量 upsert 或其他模式?
【发布时间】:2017-12-20 15:02:25
【问题描述】:

我正在使用 Postgres、NodeJS 和 Knex。

我有以下情况:

  1. 具有唯一字段的数据库表。
  2. 在 NodeJS 中,我有一个对象数组,我需要:

    一个。如果表不包含唯一id,则插入新行,或者

    b.如果表确实包含唯一 ID,则更新其余字段。

据我所知,我有三个选择:

  1. 执行查询以检查每个数据库中是否存在,并根据响应执行更新或插入。这会消耗资源,因为每个数组项都需要调用,而且还有插入或更新。
  2. 删除数组中所有具有 id 的行,然后执行插入。这意味着只有 2 次操作,但自动增量字段将继续增长。
  3. 执行 upsert,因为 Postgres 9.5 支持它。批量 upsert 似乎有效,并且只调用了数据库。

查看我知道的选项,upsert 似乎是最合理的选项,但它有什么缺点吗?

【问题讨论】:

    标签: node.js postgresql knex.js


    【解决方案1】:

    Upsert 是常用的方式。

    另一种方法是使用单独的插入/更新操作,而且很可能会更快:

    1. 定义现有行 select id from t where id in (object-ids) (*)

    2. 通过 (*) 结果更新现有行

    3. 按 (*) 过滤数组并批量插入新行。

    查看相同问题的更多详细信息here

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2016-04-03
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多