【发布时间】:2014-06-24 08:49:08
【问题描述】:
我想知道即使在子查询中使用了 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 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不设置为零?
【问题讨论】:
标签: sql-update postgresql-9.3 mvcc