用pg-promise在事务中的另一个插入之后插入

时间:2019-04-12 10:21:56

标签: node.js postgresql pg-promise

好的,我看了看,但是没有找到对我有用的东西。如果您可以带我任何东西或帮助我找到解决方案,那就太好了。

假设我有一个“用户”表(列:id,用户名和名称)和一个“ users_items”表(列:id_item,id_user,两个外键)

我要做什么:我想插入一个新用户,并为他分配一个每个人都应该拥有的默认项目。为此,我想创建一个事务,其中保存所有内容或不保存任何内容。因此,如果(由于任何原因)我不能给他该商品,我希望用户创建失败。

我如何做:

const pgp = require('pg-promise')(
    {
        capSQL: true // generate capitalized SQL 
    });

const db = pgp(configuration);

saveUser = (username, name) =>
    db.tx (t =>
        t.one('INSERT INTO users (username, name) VALUES $1, $2 RETURNING *', [username, name]).then(user =>
            t.none ('INSERT INTO users_items (id_user, id_item) VALUES $1, 1', [user.id]).then(()=>
                console.log('Everything\'s alright :)');
        )
    );

我的期望:一切运行正常,我们都很高兴:)。

实际发生的情况:第一条指令正确,并正确返回具有ID的用户。但是,第二个告诉我约束fk_id_user被违反,并执行ROLLBACK。

部分未提交第一个插入的部分工作正常。但是,第二次插入也不行吗?我是否了解某些极端错误的信息,或者pg-promise是否无法正常工作?或者也许我需要做一些不同的事情。任何帮助都将不胜感激。

0 个答案:

没有答案