2016-04-24 39 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無關):)好,你發現了這個問題;) –