我有一张 table
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序列没有递增?
最佳答案
这是因为 DEFAULT
子句只有在您省略 SET
子句中的列或插入特殊值 DEFAULT
时才会被评估。
在您的第一个 INSERT
中,DEFAULT
子句未被评估,因此序列不会增加。您的第二个 INSERT
使用 DEFAULT
子句,序列增加并返回值 1,这与前面的 INSERT
中明确给出的值冲突.
不要将 INSERT
与使用序列的自动值创建和显式指定列的 INSERT
混合使用。或者如果你必须这样做,你应该确保这些值(value)观不会发生冲突,例如通过对自动生成的值使用偶数,对显式 INSERT
使用奇数。
关于插入时出现 PostgreSQL BIGSERIAL 和 "duplicate key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40586576/