Je suis en train de construire un nestjs application qui utilise typeorm pour communiquer avec postgres.
Mes tables sont créées dynamiquement, et les données sont insérées de manière dynamique. C'est pourquoi je crus requête au lieu d'entités.
Le problème est que certaines des données dans des tables liées entre elles et je ne peux pas insérer de nouvelles données, sauf si l'précédente requête d'insertion est terminée.
Comment puis-je vérifier si l'exécution de la requête fini? Voici un exemple de flux de travail que j'utilise. Il travaille avec des données de petite taille, mais échoue avec le big data (10 000 000 entrées et plus)
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();
}
}
}
Résultat souhaité est d'avoir une fonction de rappel pour l' queryRunner.query
comme ceci queryRunner.query('raw_sql', (err, res) => {})
Est-il possible avec typeorm?
Merci