可串行隔离级别
The PostgreSQL manual page状态:
[Like] the Repeatable Read level,applications using this level must be prepared to retry transactions due to serialization failures.
在Repeatable Read或Serializable级别遇到序列化失败的条件是什么?
我试图通过两个psql实例来引发序列化失败,但即使一个事件是由一个实例提交的,另一个实例在一个可序列化级别的事务中,而另一个实例在另一个提交的时候成功地提交了更改.两者都简单地将记录插入表中,所以也许我需要尝试更复杂的东西.
基本上我想了解在串行化失败的情况下会发生什么,以及序列化失败是如何发生的.
解决方法
对于REPEATABLE READ,这个例子会做:
准备阶段:
psql-0> CREATE TABLE foo(key int primary key,val int); CREATE TABLE psql-0> INSERT INTO foo VALUES(1,42);
现在关注psql-X部分,指示交互操作:
psql-1> BEGIN ISOLATION LEVEL REPEATABLE READ; psql-1> UPDATE foo SET val=val+1; UPDATE 1 psql-2> BEGIN ISOLATION LEVEL REPEATABLE READ; psql-2> UPDATE foo SET val=val+1; *** no output,transaction blocked *** psql-1> COMMIT; psql-2> *** unblocks *** ERROR: Could not serialize access due to concurrent update
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。