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

时间:2017-07-15 17:49:22

标签: node.js postgresql knex.js

我正在使用Postgres,NodeJS和Knex。

我有以下情况:

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

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

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

  3. 据我所知,我有三种选择:

    1. 执行查询以检查数据库中是否存在每个查询,并根据响应进行更新或插入。这会花费资源,因为每个数组项都会调用,也会插入或更新。
    2. 删除数组中包含id的所有行,然后执行插入操作。这意味着只有2次操作,但自动增量字段将继续增长。
    3. 执行upsert,因为Postgres 9.5支持它。批量upsert似乎有用,而且只能调用数据库。
    4. 通过我所知道的选项,upsert似乎是最合理的,但它有任何缺点吗?

1 个答案:

答案 0 :(得分:1)

Upsert是一种常见的方式。

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

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

  2. 按(*)结果

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

  5. 查看同一问题here

    的详细信息