PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Opcjonalna instrukcja INSERT w łańcuchu transakcji przy użyciu NodeJS i Postgres

Ręczne zarządzanie transakcjami to zdradliwa ścieżka, spróbuj od tego odejść!;)

Oto jak zrobić to poprawnie, z pomocą 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
        });
}

Lub, jeśli wolisz składnię ES7:

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
        });
}

AKTUALIZUJ

Zamieniono generatory ES6 na ES7 async /await w przykładzie, ponieważ pg-promise przestał wspierać generatory ES6 od wersji 9.0.0




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz pierwszy rekord, jeśli żaden nie pasuje

  2. Jak odświeżyć encje JPA, gdy baza danych zaplecza zmienia się asynchronicznie?

  3. Wizualny interfejs PostgreSQL podobny do phpMyAdmin?

  4. Spark Dataframes UPSERT do Postgres Table

  5. Jak połączyć GraphQL i PostgreSQL