我们正在处理的遗留代码不会自动递增主键(参见serial),所以我必须手动完成。在插入时手动更新主键字段的正确方法是什么。当我执行以下操作时,我得到一个错误
表:
CREATE TABLE pizza (
id bigint not null,
price int
)Insert语句:
INSERT INTO pizza
(id, price)
VALUES
(
(SELECT max(id) from pizza)+1,
1.75
)发布于 2020-09-04 13:06:22
不要使用max()+1生成主键。这对于并发插入是不安全的,而且它也不能很好地伸缩。
只需创建一个序列并使用它:
create sequence pizza_id_seq;然后将其与表中的当前值同步:
select setval('pizza_id_seq', coalesce(max(id),1))
from pizza;然后,不要将INSERT语句更改为使用可怕的max() + 1,只需使用以下序列:
INSERT INTO pizza
(id, price)
VALUES
(nextval('pizza_id_seq'), 1.75)https://stackoverflow.com/questions/63734842
复制相似问题