我想向表中插入或更新数据。 “组”列是唯一的,组的 ID 应保持不变。
有一个 fiddle : http://sqlfiddle.com/#!17/551ea/3
在 Insert 上,一切正常
更新也适用于 "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
);
最佳答案
看看这个fiddle
每次在插入时发生冲突 - 序列值被丢弃,ON UPDATE
请求一个新值。所以最初你从 1 开始,然后你插入 3 个元组,所以序列的最终值为 3。然后你尝试插入一个新的元组但是有冲突 - 所以序列的值现在是 4。然后你尝试插入一个新的元组 - 它的序列值为 5。
如果您继续运行 2 个插入,序列将继续递增。 SQLfiddle 可能使用持久连接或某些连接池,这些连接池在重建模式时无法正确重置序列。
关于sql - 我的 Postgres 插入或更新查询出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184624/