手动更新主键
manually updating primary key
我们正在处理不会自动递增主键的遗留代码(请参阅 serial
),因此我必须手动执行此操作。在插入时手动更新主键字段的正确方法是什么。当我执行以下操作时出现错误
Table:
CREATE TABLE pizza (
id bigint not null,
price int
)
插入语句:
INSERT INTO pizza
(id, price)
VALUES
(
(SELECT max(id) from pizza)+1,
1.75
)
不要使用 max()+1
生成主键。它对并发插入不安全,而且扩展性也不好。
只需创建一个序列并使用它:
create sequence pizza_id_seq;
然后将其与table中的当前值同步:
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)
我们正在处理不会自动递增主键的遗留代码(请参阅 serial
),因此我必须手动执行此操作。在插入时手动更新主键字段的正确方法是什么。当我执行以下操作时出现错误
Table:
CREATE TABLE pizza (
id bigint not null,
price int
)
插入语句:
INSERT INTO pizza
(id, price)
VALUES
(
(SELECT max(id) from pizza)+1,
1.75
)
不要使用 max()+1
生成主键。它对并发插入不安全,而且扩展性也不好。
只需创建一个序列并使用它:
create sequence pizza_id_seq;
然后将其与table中的当前值同步:
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)