在pg-promise中,当主键是Serial类型时,如何插入数据?省略字段ID会在调用中没有响应。
下面的代码在catch中没有产生错误(也没有执行 then 分支)。
function postSecao(req, res){
var data = req.body;
var db = pgp(cn);
db.none("insert into public.secoes(nome) values($1)", [data.nome])
.then(function () {
pgp.end();
return res.status(201).end();
})
.catch(function (error) {
console.log(err);
pgp.end();
return res.status(500).end();
});
}
表格:
CREATE TABLE public.secoes
(
id bigint NOT NULL DEFAULT nextval('secoes_id_seq'::regclass),
nome character varying(100),
CONSTRAINT id PRIMARY KEY (id)
)
手动提供ID无问题。
function postSecao(req, res){
var data = req.body;
var db = pgp(cn);
db.none("insert into public.secoes(id, nome) values($1,$2)", [data.id, data.nome])
.then(function () {
pgp.end();
return res.status(201).end();
})
.catch(function (error) {
console.log(err);
pgp.end();
return res.status(500).end();
});
}
当然,SQL在PGAdmin中运行良好。
insert into public.secoes(nome) values('test')
答案 0 :(得分:1)
我刚想通了。问题出在用户的权限控制中。访问数据库的用户必须拥有串行字段中使用的序列的权限。
所以不是pg-promise问题。