我有一张桌子
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');
我得到了
错误:重复键值违反了唯一约束" users_pkey" DETAIL:Key(id)=(1)已经存在。
当我插入" id"为什么id序列不会递增?我自己?
答案 0 :(得分:2)
这是因为如果您省略DEFAULT
子句中的列或插入特殊值SET
,则仅评估DEFAULT
子句。
在您的第一个INSERT
中,未评估DEFAULT
子句,因此不会增加序列。您的第二个INSERT
使用DEFAULT
子句,序列增加并返回值1,该值与前一个INSERT
中明确给出的值冲突。
不要使用明确指定列的序列和INSERT
将INSERT
与自动值创建混合在一起。或者,如果必须,您应确保值不会发生碰撞,例如通过对自动生成的值使用偶数和为显式INSERT
s使用奇数。