node.js和postgres批量upsert或其他模式?

我正在使用Postgres,NodeJS和Knex。

我有以下情况:

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

    一个。 插入一个新行,如果该表不包含唯一的ID或

    湾 如果表中包含唯一的ID,则更新剩余的字段。

据我所知,我有三个select:

  1. 做一个查询来检查数据库中是否存在,并根据响应进行更新或插入。 这会花费资源,因为每个数组项的调用以及插入或更新。
  2. 删除数组中具有id的所有行,然后执行插入操作。 这意味着只有2个操作,但自动增量领域将继续增长。
  3. 因为Postgres 9.5支持它,所以执行一个upsert。 批量upsert似乎工作,只有一个调用数据库。

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

Upsert是一个常用的方法。

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

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

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

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

在这里查看更多相同问题的细节