sql >> Database teknologi >  >> RDS >> PostgreSQL

Valgfri INSERT-sætning i transaktionskæden ved hjælp af NodeJS og Postgres

Manuel transaktionsstyring er en forræderisk vej, prøv at styre væk fra det!;)

Sådan gør du det korrekt ved hjælp af pg-promise:

function(req, res) {
    db.tx(t => { // automatic BEGIN
            return t.one('INSERT_1 VALUES(...) RETURNING id', paramValues)
                .then(data => {
                    var q = t.none('INSERT_2 VALUES(...)', data.id);
                    if (req.body.value != null) {
                        return q.then(()=> t.none('INSERT_3 VALUES(...)', data.id));
                    }
                    return q;
                });
        })
        .then(data => {
            res.send("Everything's fine!"); // automatic COMMIT was executed
        })
        .catch(error => {
            res.send("Something is wrong!"); // automatic ROLLBACK was executed
        });
}

Eller, hvis du foretrækker ES7-syntaks:

function (req, res) {
    db.tx(async t => { // automatic BEGIN
            let data = await t.one('INSERT_1 VALUES(...) RETURNING id', paramValues);
            let q = await t.none('INSERT_2 VALUES(...)', data.id);
            if (req.body.value != null) {
                return await t.none('INSERT_3 VALUES(...)', data.id);
            }
            return q;
        })
        .then(data => {
            res.send("Everything's fine!"); // automatic COMMIT was executed
        })
        .catch(error => {
            res.send("Something is wrong!"); // automatic ROLLBACK was executed
        });
}

OPDATERING

Udskiftet ES6-generatorer med ES7 async /await i eksemplet, fordi pg-promise holdt op med at understøtte ES6-generatorer fra version 9.0.0




  1. 3 måder at returnere en liste over SQL Server Agent-job (T-SQL)

  2. Sådan genereres drop-tabelerklæring for alle tabellerne i en database - SQL Server / T-SQL vejledning del 48

  3. Hvordan gendanner man en enkelt tabel fra en .sql postgresql backup?

  4. Konverter VARCHAR2 til tal