Stavím nestjs aplikace, která používá typeorm komunikovat s postgres.
Moje tabulky jsou vytvářeny dynamicky, a dat je vložen také dynamicky. To je důvod, proč používám raw query namísto subjekty.
Problém je, že některé údaje v tabulkách jsou související a nemůžu vložit nové údaje, pokud předchozí vložit dotaz dokončil.
Jak mohu zkontrolovat, zda spuštění dotazu skončil? Zde je příklad pracovního postupu, které používám. To funguje s malými data, ale nedokáže s velkými daty (10 000 000 položek a více)
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ýsledek je, aby některé zpětné volání pro queryRunner.query
takhle queryRunner.query('raw_sql', (err, res) => {})
Je to možné s typeorm?
Díky