TypeORM cum pentru a verifica dacă execuție interogare a terminat?

0

Problema

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

nestjs node.js-typeorm postgresql sql
2021-11-23 15:59:14
1

Cel mai bun răspuns

1

Modul în care codul este scris, cu confirmarea tranzacției se va întâmpla numai după ce se introduce finisaje. Ceea ce înseamnă că, în acel moment, puteți, de asemenea, executa interogare nouă. Nu ai nevoie neapărat de un apel invers pentru că sunteți folosind asincron/așteaptă sintaxă.

Cu toate acestea, se pare că, cu foarte mare insertii, ceva rău se întâmplă (un fel de interogare/timeout de conexiune, sau de resurse de server nu). Încercați depanare/imprimare eroare pentru a vedea ce sa întâmplat cu adevărat.

Vă sugerez să încercați să împartă introduce în mai multe loturi (de ceva de genul 1k înregistrări, de exemplu).

2021-11-23 16:26:07

Salut. Multumesc pentru arătând spre tranzacție a comis-o. Asta chiar pare a fi un loc bun de unde pot executa o interogare nouă. Și da. Îmi împart datele în bucăți. Dupa cateva teste am ajuns cu 50 de mii de intrări per bucată să fie optimă. (de obicei de date de intrare este de peste un milion)
Getsumi3

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................