PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Незадължителен израз INSERT във веригата на транзакции, използвайки NodeJS и Postgres

Ръчното управление на транзакциите е коварен път, опитайте се да се отдръпнете от това!;)

Ето как да го направите правилно с помощта на 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
        });
}

Или, ако предпочитате синтаксис на 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
        });
}

АКТУАЛИЗИРАНЕ

Заменени ES6 генератори с ES7 async /await в примера, защото pg-promise спря да поддържа ES6 генератори от версия 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. Потребителски дефинирани променливи в PostgreSQL

  2. Хибернация на картографиране между PostgreSQL enum и Java enum

  3. LEAST() Функция в PostgreSQL

  4. Компромиси при внедряване на горещ режим на готовност

  5. Бройте дните между 2 дати в JPA