0

在 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')
4

1 回答 1

1

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

所以不是 pg-promise 问题。

于 2016-04-24T20:54:59.907 回答