2017-04-09 33 views
0

我的表postgres數據庫有一個自動遞增鍵。如何在使用node-postgres的序列中使用nextval

在convencional Postgres的SQL我可以:

INSERT INTO CITY(ID,NAME) VALUES(nextval('city_sequence_name'),'my first city'); 

我怎樣才能做到這一點使用節點的Postgres?到現在爲止,我已經試過:

myConnection.query('INSERT INTO city(id,name) VALUES ($1,$2)', ['nextval("city_sequence_name")','my first city'],callback); 

但錯誤規則:

erro { error: sintaxe de entrada é inválida para integer: "nextval("city_sequence_name")"

+0

嘗試改變' 'NEXTVAL( 「city_sequence_name」)''to' 「NEXTVAL( 'city_sequence_name')」' –

+0

我只是嘗試這樣做。同樣的錯誤再次。對不起 – joelton

+0

爲什麼不直接跳過那一列? - '插入城市(名稱)值('我的第一個城市');'。這是通常讓自動生成的列生成新值的方式。或者,我們可以在INSERT INTO CITY(ID,NAME)VALUES(默認,'我的第一個城市');'。 –

回答

1

所以,我能夠找出解決這一情況:

connection.query("INSERT INTO city(id,name) VALUES(nextval('sequence_name'),$1)", ['first city'],callback); 
0

這是一個不好實踐。相反,只需將列設置爲DEFAULT nextval()或使用serial類型。

# CREATE TABLE city (id serial PRIMARY KEY, name text); 
CREATE TABLE 
# \d city 
         Table "public.city" 
Column | Type |      Modifiers      
--------+---------+--------------------------------------------------- 
id  | integer | not null default nextval('city_id_seq'::regclass) 
name | text | 
Indexes: 
    "city_pkey" PRIMARY KEY, btree (id) 

# INSERT INTO city (name) VALUES ('Houston'), ('Austin'); 
INSERT 0 2 
test=# TABLE city; 
id | name 
----+--------- 
    1 | Houston 
    2 | Austin 
(2 rows) 
相關問題