Construiesc o nestjs aplicație care utilizează typeorm de a comunica cu postgres.
Mesele mele sunt create dinamic, și date este inserat, de asemenea, dinamic. De aceea, eu folosesc materii prime de interogare în loc de entități.
Problema este că unele date în tabelele sunt legate și nu pot introduce date noi, cu excepția cazului precedent a introduce interogare a terminat.
Cum pot verifica dacă execuție interogare a terminat? Aici este un exemplu de flux de lucru pe care o folosesc. Acesta funcționează cu date de mici dimensiuni, dar nu reușește cu date de mare (10 000 000 de intrări și mai mult)
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();
}
}
}
Rezultatul dorit este de a avea un apel invers pentru queryRunner.query
astfel queryRunner.query('raw_sql', (err, res) => {})
Este posibil cu typeorm?
Multumesc