当前位置: 首页 > 知识库问答 >
问题:

typeorm高效批量更新

晏永康
2023-03-14

我有一个在< code>postgresql数据库上使用< code>typeorm的更新查询,如下所示,该查询频繁地在20个项目的列表上执行(每30秒一次)。大约需要。更新12秒,对我的极限来说已经很多了。

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

是否有可能在单个查询中执行这样的批量更新,而不是迭代其他项?如果是的话-怎么做?

项。状态项。数据对于每个项目都是唯一的。

共有2个答案

林和煦
2023-03-14

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

但是,来自 Typeorm 的更新查询生成器不支持 from 子句。就目前而言,我认为原始查询是唯一的方法,即获取管理器(..query(“原始sql...”)。

章高爽
2023-03-14

有一种方法可以通过升级来解决这个问题

使用数据库上已有的数据数组并使用ON CONFLICT对其进行更新。

const queryInsert = manager
    .createQueryBuilder()
    .insert()
    .into(Entity)
    .values(updatedEntities)
    .orUpdate(["column1", "column2", "otherEntityId"], "PK_table_entity")
    .execute();

将运行以下内容:

INSERT INTO entity (
    "id", "column1", "column2", "otherEntityId"
) VALUES 
    ($1, $2, $3, $4), 
    ($5, $6, $7, $8), 
ON CONFLICT 
    ON CONSTRAINT "PK_table_entity" 
    DO UPDATE SET 
        "column1" = EXCLUDED."column1", 
        "column2" = EXCLUDED."column2", 
        "otherEntityId" = EXCLUDED."otherEntityId"

但您需要注意,orUpdate不支持使用Entity关系,您需要传递关系实体的id列。它也不会对命名策略进行任何操作。另一个问题是,它只有在您的pk没有使用@PrimaryGeneratedColumn时才有效(您可以改用@Primary Column)

 类似资料:
  • 我正在为我们的文件上传过程执行一个spring批处理工作。我的要求是读取平面文件,应用业务逻辑,然后将其存储在DB中,然后发布一个Kafka消息。 我有一个基于块的步骤,它使用自定义的读取器、处理器和写入器。这个过程工作得很好,但是处理一个大文件需要很多时间。 处理一个有60k条记录的文件需要15分钟。我需要减少到5分钟以下,因为我们将消耗比这更大的文件。 根据https://docs.sprin

  • Android中定期更新变量的最有效方法是什么? 我有一个整数,它的值必须每秒增加一次(只有当应用程序打开时),并且应该可以通过所有活动/片段访问它。 现在这是我的代码: Mainactive中的onCreate(): 和更新值类:

  • 一、简介 方便用户在设置URL规则时更新url,无需手动去更新各页面URL。只需选择就能批量更新URL即可。 二、功能演示 1.批量更新URL 1、仅当内容页URL规则发上变化时,请批量更新,地址未改变时,不需要更新 。 2、规则设置:设置 > 相关设置 > 管理栏目 > 添加或修改栏目 选择需要更新的模型和栏目,输入每轮更新的信息数目提交则完成批量更新URL操作。如下图所示:

  • 一、简介 主要用来操作黄页模块的相关更新操作 ! 1、仅当启用、关闭伪静态时,请批量更新所有链接地址,除此,不需要更新 。 2、启用伪静态在模块配置里。 3、更新企业URL,只需选中企业库模型即可,不必选分类。 二、功能演示

  • 我正在尝试使用TypeORM将多个JSON数据插入到一个名为integration_data的表中。我的应用程序使用NodeJS。但是不知何故,我无法使用TypeORM形成查询,以在PostgresSQL中对我的JSON数据执行批量UpSert。 以下是我的逻辑:- 在这里,我传递的是原始数据,它是一个 JSON 对象数组。 实体:- 这里,integration_data表中的emp_data列

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出