【发布时间】:2020-03-19 00:59:10
【问题描述】:
我可以使用插入冲突而不需要 SEQUENCE 生成序列号吗?
这是我的桌子:
CREATE TABLE web.flow_no
(
apply_kind character varying(15) COLLATE pg_catalog."default" NOT NULL,
seq_name character varying(10) COLLATE pg_catalog."default" NOT NULL,
seq_no numeric(8,0) NOT NULL DEFAULT 1,
CONSTRAINT flow_no_pk PRIMARY KEY (apply_kind, seq_name)
)
但是 Sql 不行: 1:
insert into web.flow_no(apply_kind,seq_name)values('ISO_FILE','202003')
ON CONFLICT(apply_kind, seq_name)
DO UPDATE SET seq_no=EXCLUDED.seq_no+1
RETURNING seq_no
总是得到 2
2:
insert into web.flow_no(apply_kind,seq_name)values('ISO_FILE','202003')
ON CONFLICT(apply_kind, seq_name)
DO UPDATE SET seq_no=
(select seq_no from web.flow_no where apply_kind=EXCLUDED.apply_kind and
seq_name=EXCLUDED.seq_name)+1
RETURNING seq_no
不是线程安全的 (ATOM):返回 seq_no 的多个查询会发生冲突
【问题讨论】:
标签: sql postgresql sql-update sql-insert