首页 > 解决方案 > typeorm 高效批量更新

问题描述

我有一个在数据库上使用的更新查询typeormpostgresql如下面的一个,它经常在 20 多个项目的列表上执行(每 30 秒一次)。大约需要。更新时间为 12 秒,这对于我的限制来说已经很长了。

for (item of items) {
    await getConnection().createQueryBuilder().update(ItemEntity)
        .set({status: item.status, data: item.data})
        .whereInIds(item.id).execute();
}

是否可以在单个查询中执行这样的批量更新,而不是迭代其他项目?如果是这样 - 如何?

item.status并且item.data每个项目都是独一无二的。

标签: javascriptpostgresqlormtypeorm

解决方案


使用纯 psql 这可以按照以下答案中的描述完成:使用 PostgreSQL 在同一查询中更新多行

但是,UpdateQueryBuilderfrom Typeorm 不支持from子句。目前,我认为原始查询是唯一的方法,即getManager().query("raw sql ...").


推荐阅读