Som budovania nestjs aplikácie, ktorá používa typeorm komunikovať s postgres.
Môj tabuľky sú vytvárané dynamicky, a údaje sa vkladajú aj dynamicky. To je dôvod, prečo som sa použiť suroviny dotaz namiesto subjektov.
Problém je, že niektoré údaje v tabuľkách sú prepojené a nemôžem vložiť nové údaje, pokiaľ predchádzajúce vložiť dopyt bol ukončený.
Ako môžem skontrolovať, ak vykonanie dotazu hotové? Tu je príklad pracovného postupu, ktoré používam. To funguje s malými údaje, ale zlyhá s big data (10 000 000 záznamov a viac)
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žadovaný výsledok je, že niektoré žiadosti o spätný pre queryRunner.query
ako to queryRunner.query('raw_sql', (err, res) => {})
Je možné s typeorm?
Vďaka