2016-04-24 23 views
0

在pg-promise中,当主键是Serial类型时,如何插入数据?省略字段ID将在呼叫中创建任何响应。在pg-promise中插入带有序列号的id

以下代码在catch中不产生错误(并且也不执行,然后分支)。

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

您必须更改您的问题,并提供'.catch'中的任何错误输出(如果有)。现在的方式 - 只是没有意义你在说什么。 pg-promise不关心底层的'serial'类型。 –

+0

编辑放置更多细节,现在希望更好。 –

回答

1

我刚想通了。问题在于用户的权限控制。访问数据库的用户有必要对序列字段中使用的序列拥有特权。

所以不是pg-promise问题。

+0

看起来是从一开始(与pg-promise无关):)好,你发现了这个问题;) –