node.js 和 postgres 批量更新插入或其他模式?
node.js and postgres bulk upsert or another pattern?
我正在使用 Postgres、NodeJS 和 Knex。
我有以下情况:
- 具有唯一字段的数据库 table。
在 NodeJS 中,我有一个对象数组,我需要:
一个。插入一个新行,如果 table 不包含唯一 id,或者
b。如果 table 确实包含唯一 ID,请更新其余字段。
据我所知,我有三个选择:
- 执行查询以检查每个是否存在于数据库中,并根据响应执行更新或插入。这会消耗资源,因为需要调用每个数组项以及插入或更新。
- 删除数组中所有具有id的行,然后执行插入。这意味着只有 2 个操作,但自动增量字段将继续增长。
- 执行更新插入,因为 Postgres 9.5 支持它。批量更新插入似乎有效,而且只有对数据库的调用。
查看我所知道的选项,upsert 似乎是最合理的,但它有什么缺点吗?
Upsert
是常用的方式。
另一种方法是使用单独的 insert/update 操作,而且很可能会更快:
定义现有行
select id from t where id in (object-ids)
(*)
根据 (*) 结果更新现有行
按 (*) 过滤数组并批量插入新行。
查看同一问题的更多详细信息here
我正在使用 Postgres、NodeJS 和 Knex。
我有以下情况:
- 具有唯一字段的数据库 table。
在 NodeJS 中,我有一个对象数组,我需要:
一个。插入一个新行,如果 table 不包含唯一 id,或者
b。如果 table 确实包含唯一 ID,请更新其余字段。
据我所知,我有三个选择:
- 执行查询以检查每个是否存在于数据库中,并根据响应执行更新或插入。这会消耗资源,因为需要调用每个数组项以及插入或更新。
- 删除数组中所有具有id的行,然后执行插入。这意味着只有 2 个操作,但自动增量字段将继续增长。
- 执行更新插入,因为 Postgres 9.5 支持它。批量更新插入似乎有效,而且只有对数据库的调用。
查看我所知道的选项,upsert 似乎是最合理的,但它有什么缺点吗?
Upsert
是常用的方式。
另一种方法是使用单独的 insert/update 操作,而且很可能会更快:
定义现有行
select id from t where id in (object-ids)
(*)根据 (*) 结果更新现有行
按 (*) 过滤数组并批量插入新行。
查看同一问题的更多详细信息here