node.js 和 postgres 批量更新插入或其他模式?

node.js and postgres bulk upsert or another pattern?

我正在使用 Postgres、NodeJS 和 Knex。

我有以下情况:

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

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

    b。如果 table 确实包含唯一 ID,请更新其余字段。

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

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

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

Upsert是常用的方式。

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

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

  2. 根据 (*) 结果更新现有行

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

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