我想向表中插入或更新数据。 “组”列是唯一的,组的ID应该保持不变。
有一个小提琴: http://sqlfiddle.com/#!17/551ea/3
在插入时,一切正常
该更新还适用于“ Group” ='TEST01'
但是当我插入一个新组然后更新时,ID会更改(按多个“运行SQL”)
这是我的插入查询:
INSERT INTO GROUPS ("GROUP", SERVER, PATH, SHARE)
VALUES ('TEST04', 4, 4, 4)
ON CONFLICT("GROUP") DO UPDATE
SET SERVER = 11,
PATH = 11,
SHARE = 11
WHERE GROUPS."GROUP" = 'TEST01'
该ID将在其他表中使用,仅应为第一个条目创建一次。
这是一般结构:
CREATE SEQUENCE gid START 1;
CREATE TABLE GROUPS (
ID integer NOT NULL DEFAULT nextval('gid') PRIMARY KEY,
"GROUP" VARCHAR NOT NULL UNIQUE,
SERVER integer,
PATH integer,
SHARE integer
);
答案 0 :(得分:0)
看看这个fiddle
每次插入都会发生冲突-序列值将被丢弃,ON UPDATE
将请求一个新值。因此,最初从1开始,然后插入3个元组,因此序列的最终值为3。然后尝试插入新的元组,但存在冲突-因此序列的值现在为4。然后尝试插入一个新的元组-该序列的值为5。
如果继续运行2次插入,序列将继续递增。 SQLfiddle可能使用持久性连接或某些连接池,这些连接池在重建架构时无法正确重置序列。