1. 程式人生 > >postgresql獲得一個插入的序列號的值

postgresql獲得一個插入的序列號的值

1)我如何獲得一個插入的序列號的值?

一種方法是在插入之前先用函式 nextval() 從序列物件裡檢索出下一個 SERIAL 值,然後再顯式插入。可用偽碼這樣描述:

new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");

這樣還能在其他查詢中使用存放在 new_id 裡的新值(例如,作為 person 表的外來鍵)。 注意自動建立的 SEQUENCE 物件的名稱將會是 <table

>_<serialcolumn>_seq, 這裡 table 和 serialcolumn 分別是你的表的名稱和你的 SERIAL 欄位的名稱。

類似的,在 SERIAL 物件預設插入後你可以用函式 currval() 檢索剛賦值的 SERIAL 值,例如:

execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");

new_id = execute("SELECT currval('person_id_seq')");

2)使用 currval() 會導致和其他使用者的衝突情況(race condition)嗎?

不會。currval() 返回的是你本次會話程序所賦的值而不是所有使用者的當前值。