我想知道即使在子查询中使用了 FOR UPDATE 子句,在 UPDATE 操作之后是否不应将 xmax 值设置为零?
我创建了测试表:
CREATE TABLE def.dummy
(
id serial NOT NULL,
nazwa text,
CONSTRAINT pk_dummy PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
并插入了一些值:
INSERT INTO def.dummy(
nazwa)
VALUES ('1'),('2'),('3');
现在,当我尝试使用子查询进行 UPDATE 时:
UPDATE def.dummy AS sp
SET nazwa = 'changed' FROM
(SELECT id, nazwa, xmax, xmin
FROM def.dummy
WHERE id=1
AND xmax = 0
LIMIT 1 FOR UPDATE) AS get_set
WHERE get_set.id = sp.id;
RETURNING sp.*;
提交事务后,xmax 值不会重置为 0,而是保持为:
这是正确的行为吗?如果是,为什么 xmax 在操作后不设置为零?