node.js和postgres批量upsert或其他模式?
我正在使用Postgres,NodeJS和Knex。
我有以下情况:
- 具有唯一字段的数据库表。
-
在NodeJS中,我有一个对象数组,我需要:
一个。 插入一个新行,如果该表不包含唯一的ID或
湾 如果表中包含唯一的ID,则更新剩余的字段。
据我所知,我有三个select:
- 做一个查询来检查数据库中是否存在,并根据响应进行更新或插入。 这会花费资源,因为每个数组项的调用以及插入或更新。
- 删除数组中具有id的所有行,然后执行插入操作。 这意味着只有2个操作,但自动增量领域将继续增长。
- 因为Postgres 9.5支持它,所以执行一个upsert。 批量upsert似乎工作,只有一个调用数据库。
通过我知道的选项来看,upsert似乎是最合理的,但它有什么缺点?
Upsert
是一个常用的方法。
另一种方法是使用单独的插入/更新操作,并且很可能会更快:
-
定义现有的行
select id from t where id in (object-ids)
(*) -
通过(*)结果更新现有行
-
按(*)过滤数组并批量插入新行。
在这里查看更多相同问题的细节