2013-03-30 58 views
1

我有一個表格,列數超過了幾列,並且想要使用RETURNING返回INSERT查詢的ID。不幸的是,似乎在這種情況下,我必須指定所有列在沒有明確命名列的情況下使用RETURNING

INSERT INTO "user" ("id", ...) VALUES (DEFAULT, ...) RETURNING "id" 

,而不是僅僅做

INSERT INTO "user" VALUES (DEFAULT, ...) RETURNING "id" 

至極使得查詢非常長,而無法讀取。我能否以某種方式返回ID而不指定每一列?

回答

2

當然你可以。你的第二個查詢應該是正常的 - 假設id實際上是表中的第一個位置 - 我懷疑它。

與驗證:

SELECT attnum 
FROM pg_attribute 
WHERE attrelid = '"user"'::regclass 
AND attname = 'id'; 

並不意味着你應該它,雖然。除了臨時呼叫之外,只有少數情況下,您應該將而不是附加列表列表給INSERT命令。

無論哪種方式,你都不應該使用reserved word,比如user作爲表名。這是一個非常糟糕的主意。一個經典的裝載腳踏槍的情況。

0

我無法重現該問題。我正在運行PostgreSQL版本9.1,創建了一個簡單的users表,其中列idname

我然後跑這個查詢:

INSERT INTO users VALUES(DEFAULT,'jszobody') RETURNING id

我得到了id回而不在INSERT查詢中指定的列。它似乎剛剛工作。

你有什麼錯誤?什麼版本的PostgreSQL?你有沒有試過在這樣一個非常簡單的測試案例中進行再現,排除了查詢,默認值等其他問題?

+0

這很奇怪。它一定是別的東西(可能是查詢中的無用字符或類似的東西),這會產生錯誤。在我重寫了整個查詢字符串後,它確實沒有指定列。 –

相關問題