PostgreSQL禁止的异象是什么

58次阅读
没有评论

共计 2317 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要讲解了“PostgreSQL 禁止的异象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“PostgreSQL 禁止的异象是什么”吧!

测试数据

数据表 idx,在 id 列上有索引,数据库默认的隔离级别为可串行化

15:44:16 [local:/data/run/pg12]:5120 pg12@testdb=# \d+ idx
 Table  public.idx 
 Column | Type | Collation | Nullable | Default | Storage | Stats
target | Description
--------+-------------------+-----------+----------+---------+----------+-------
-------+-------------
 id | integer | | | | plain |
 |
 c1 | character varying | | | | extended |
 |
Indexes:
  idx_id  btree (id)
Access method: heap
[pg12@localhost pg122db]$ grep  isolation  postgresql.conf
default_transaction_isolation =  SERIALIZABLE

Write 触发

操作序列如下:

时间点 T1T2T3t1begin;

t2select * from idx where id = 1;

t3
begin;
t4
select * from idx where id = 10000;
t5

begin;t6

update idx set c1 =‘x’where id = 10000;t7

commit;t8
update idx set c1 =‘x’where id = 1;

session 2(T2)在执行 update 操作时会报错

-- session 2
15:46:52 [local:/data/run/pg12]:5120 pg12@testdb=#* update idx set c1 =  x  where id = 1;
ERROR: could not serialize access due to read/write dependencies among transactions
DETAIL: Reason code: Canceled on identification as a pivot, during write.
HINT: The transaction might succeed if retried.
15:47:10 [local:/data/run/pg12]:5120 pg12@testdb=#!

Read 触发

操作序列如下:

时间点 T1T2T3t1begin;

t2select * from idx where id = 1;

t3
begin;
t4
update idx set c1 =‘x1’where id = 1;
t5

begin;t6

update idx set c1 =‘x’where id = 10000;t7

commit;t8
select * from idx where id = 10000;

session 2(T2)在执行 select 操作时会报错

15:54:41 [local:/data/run/pg12]:5120 pg12@testdb=#* select * from idx where id = 10000;
ERROR: could not serialize access due to read/write dependencies among transactions
DETAIL: Reason code: Canceled on conflict out to pivot 423284, during read.
HINT: The transaction might succeed if retried.
15:55:16 [local:/data/run/pg12]:5120 pg12@testdb=#!

commit 触发

操作序列如下:

时间点 T1T2t1begin;
t2select * from idx where id = 1;
t3update tbl set c1 =‘x’where id = 10000;
t4
begin;t5
select * from idx where id = 10000;t6
update idx set c1 =‘x’where id = 1;t7
commit;t8commit;

T1 执行 commit 的时候会报错:

16:07:50 [local:/data/run/pg12]:5120 pg12@testdb=#* commit;
ERROR: could not serialize access due to read/write dependencies among transactions
DETAIL: Reason code: Canceled on identification as a pivot, during commit attempt.
HINT: The transaction might succeed if retried.

感谢各位的阅读,以上就是“PostgreSQL 禁止的异象是什么”的内容了,经过本文的学习后,相信大家对 PostgreSQL 禁止的异象是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计2317字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)