Tworzę aplikację nestjs, która wykorzystuje typeorm do komunikacji z postgresql.
Moje tabele są tworzone dynamicznie, i dane są wstawiane również dynamicznie. Dlatego używam surowe zapytanie zamiast encji.
Problem w tym, że niektóre dane w tabelach są związane i nie mogę wstawić nowe dane, podczas gdy poprzedni wniosek na wkładkę nie zostanie zakończony.
Jak sprawdzić, zakończone czy wykonanie zapytania? Oto przykład pracy, który używam. Pracuje z kilkoma danymi, ale nie działa z dużymi danymi (10 000 000 rekordów i więcej).
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();
}
}
}
Pożądany wynik-mieć niektóre wywołania zwrotnego queryRunner.query
podobny do tego queryRunner.query('raw_sql', (err, res) => {})
Czy jest to możliwe za pomocą typeorm?
Dziękuję