我目前正在测试postgresql中的行级锁定。我使用的版本是8.3.23。我查了官方文档,这个版本支持行级锁定。但我发现它始终是一个整表锁而不是行级锁。 这是我做的:
CREATE TABLE test (
id SERIAL PRIMARY KEY,
status varchar(20)
);
INSERT INTO test(status) VALUES('a');
INSERT INTO test(status) VALUES('b');
SELECT * FROM test;
id | status
----+--------
2 | b
1 | a
(2 rows)
Then I open 1 session:
BEGIN;
SELECT * FROM test WHERE id = 1 FOR UPDATE;
This session will acquire a lock.
And open another session:
BEGIN;
SELECT * FROM test WHERE id = 2 FOR UPDATE;
我发现第二次会议将在那里举行。我的问题是:第一个会话应该只锁定那些相关的行(id = 1的行),但似乎其他行(id = 2)也受到影响。是否有任何配置在postgresql中进行实际的行级锁定?感谢。