TypeORM如何检查,如果查询执行完成了吗?

0

的问题

我要建一个nestjs应用程序,使用typeorm与postgres。

我的表是创造的动态,并插入数据也动态。 这就是为什么我使用原始的查询,而不是实体。

问题是,有些表中的数据是相关的,我不能插入新数据,除非之前插入的查询已经完成。

我如何检查,如果查询执行完成了吗? 这里是一个例子工作流程,我使用。 它适用的小数据,但没有与大数据(10 000 000个条目,并更多)

export class Test {
    constructor(
        private readonly connection: Connection;
    ) {}

    public async insertData(table1, table2, arr1, arr2) {
        await insertInto(table1, arr1);
        //I want second insertInto() to be executed after I get confirmation from database that insertInto() from above is finished
        await insertInto(table2, arr2);
    }

    private async insertInto(table, data) {
        const queryRunner = this.connection.createQueryRunner();
        await queryRunner.connect();
        await queryRunner.startTransaction();

        const preparedData = [];
        
        //prepare data to be inserted as raw query
        //...

        try {
            await queryRunner.query(`INSERT IGNORE INTO "${table}" VALUES ${preparedData}`);
            await queryRunner.commitTransaction();
        } catch (e) {
            await queryRunner.rollbackTransaction();
            throw new InternalServerErrorException(e, Error while executing custom query. Rollback transaction.)
        } finally {
            await queryRunner.release();
        }
    }
}

所希望的结果是有一些回调 queryRunner.query 像这样的 queryRunner.query('raw_sql', (err, res) => {})

是它可能与typeorm?

感谢

nestjs node.js-typeorm postgresql sql
2021-11-23 15:59:14
1

最好的答案

1

你的代码编写的,该事务提交将只发生之后插入完成。 这意味着,在这一点上,你还可以执行你的新的查询。 你不一定需要一个回,因为你使用异步/等待着语法。

然而,似乎有很大的插入,错误的东西发生了(某种形式的查询/接连接的超时,或服务资源失败). 试试/打印错误看到底发生了什么。

我建议你尝试分插入多批量(类似1k的记录,例如)。

2021-11-23 16:26:07

嗨 谢谢你指着事务提交。 其实听起来像一个好地方我可以执行一个新的查询。 并且是的。 我拆我的数据进块。 在一些测试中,我结束了50项每块是最佳的。 (通常进入的数据是超过一百万)
Getsumi3

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................