2009-07-13 88 views
0

我有一個Postgres的表是這樣的:如何使用Postgresql獲取自動生成的字段的值?

CREATE SEQUENCE seq; 
CREATE TABLE tbl (id INTEGER DEFAULT VALUE nextval('seq'), data VARCHAR); 

當我插入到表:

INSERT INTO tbl (data) VALUES ('something'); 

我怎樣才能找回我剛剛創建的記錄id字段的值?

(注意,我可能會得到一些SQL語法有點過的;要點應該清楚,雖然)

假設爲參數的緣故,我不是能調用同一CURRVAL因爲我不控制事務邊界。我可能與我的下一個呼叫在同一個會話中工作,但我可能不會。

回答

1

您正在尋找INSERT ... RETURNING。從The Manual's section on INSERT

可選的RETURNING子句會導致INSERT根據實際插入的每一行計算並返回值。這主要用於獲取默認值提供的值,例如序列號。但是,允許使用表格列的任何表達式。 RETURNING列表的語法與SELECT的輸出列表的語法相同。

1

在同一會話:

SELECT currval('seq'); 

編輯:但是,如果你不能使用CURRVAL/NEXTVAL,因爲你不知道插入和選擇序列值將出現在同一個會話中,如果你使用postgresql 8.2或更高版本,你可以像這樣編寫插入語句。

INSERT INTO tbl (data) VALUES ('something') RETURNING id; 

其中還應返回最後插入的ID。

+0

假設爲了說明我正在使用遺留庫來隔離每個後續查詢在其自己單獨的會話中。我是誰。而這只是... eugh。 – 2009-07-13 20:46:14

相關問題