sql >> データベース >  >> RDS >> PostgreSQL

NodeJSとPostgresを使用したトランザクションチェーンのオプションのINSERTステートメント

    手動のトランザクション管理は危険な道です。それを避けてください。;)

    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ジェネレーターをES7asyncに置き換えました /待つ この例では、pg-promiseがバージョン9.0.0からES6ジェネレーターのサポートを停止したためです




    1. すべてのテーブル(PostgreSQL)で特定の値を検索するにはどうすればよいですか?

    2. Greenplumデータベースとは何ですか?ビッグデータデータベースの紹介

    3. ORACLE SQL*Plusチュートリアル

    4. SQLコマンドの概要