Я создаю приложение 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?
Спасибо