2016-11-14 38 views
1

「重複鍵」 我有一個表PostgreSQL的BIGSERIAL和插入

CREATE TABLE users (
    id BIGSERIAL NOT NULL PRIMARY KEY, 
    created_at TIMESTAMP DEFAULT NOW() 
); 

首先,我跑

INSERT INTO users (id) VALUES (1); 

我跑

INSERT INTO users (created_at) VALUES ('2016-11-10T09:37:59+00:00'); 

後,我得到

ERROR: duplicate key value violates unique constraint "users_pkey" DETAIL: Key (id)=(1) already exists.

當我自己插入「id」時爲什麼id序列不會增加?

回答

2

這是因爲DEFAULT子句只有在您忽略SET子句中的列或插入特殊值DEFAULT時纔會被評估。

在你的第一個INSERT,該DEFAULT子句沒有評估,所以這個順序沒有增加。第二個INSERT使用DEFAULT子句,序列增加並返回值1,該值與前面的INSERT中明確給出的值相沖突。

不要將INSERT s與自動創建值使用明確指定列的sequence和INSERT s混合。或者如果你必須,你應該確保這些值不會相互碰撞,例如通過使用偶數爲自動生成的值和奇數爲明確INSERT s。