加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 遇到序列化失败的条件是什么?

发布时间:2020-12-12 08:47:45 所属栏目:MsSql教程 来源:网络整理
导读:可串行隔离级别 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级别遇到序列化失败的条件是什
可串行隔离级别 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

SERIALIZABLE的一个例子在PostgreSQL 9.1的文档中,应该没有问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读