陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235/19906632509(微信同号)

客服微信

【PostgreSQL PGCA题目解析29】PostgresSQL是否能够自动检测到死锁,然后退出其中一个事务?

作者:炎燚小寶
原创
发布时间:2024-01-11 09:26
浏览量:172

考试科目PGCA-E-090

考试题量:40 道单项选择题、10 道多项选择题(每题 2 分)

通过分数:60%

考试时间:60min

本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。



PostgresSQL是否能够自动检测到死锁,然后退出其中一个事务?

A.是

B.否

参考答案:A




解析:

模拟死琐

1)准备一张表,插入两条数据

testdb=> select * from s1.t2;
 id
-----
 111
 222


2)窗口1开启事务1

testdb=> begin;
BEGIN
testdb=*> update s1.t2 set id=1 where id=111;


3)窗口2开启事务2

testdb=> begin;
BEGIN
testdb=*> update s1.t2 set id=2 where id=222;
UPDATE 1


4)回到窗口1,修改事务2的数据

testdb=*> update s1.t2 set id=22222 where id=222;
。。。。等待中


5)回到窗口2,修改事务1的数据

testdb=*> update s1.t2 set id=1111 where id=111;


6)此时窗口的事务2监控到死琐

ERROR: deadlock detected
DETAIL: Process 113991 waits for ShareLock on transaction 779; blocked by process 119247.
Process 119247 waits for ShareLock on transaction 780; blocked by process 113991.
HINT: See server log for query details.
CONTEXT: while updating tuple (0,3) in relation "t2"


7)查看最终数据

testdb=> select * from s1.t2;
  id
-------
     1
 22222
(2 rows)


发现第一行数据修改被提交,第二行数据修改被回滚。



PostgreSQL PGCA考试为理论考试,需通过PostgreSQL PGCA-E-090 考试才能拿到“PostgreSQL PGCA证书”。



以下是PostgreSQL官网的考试费,可以添加云贝教育的课程顾问老师微信19941464235或者19906632509,咨询有优惠


PostgreSQL证书如下 合格考生公布:考后不超过 5 个工作日  “开源软件联盟 PostgreSQL 分会”公众号发布  证书寄送:考后统一寄送至培训机构)



云贝教育有专业的PostgreSQL PGCA认证培训课程,想快速通过考试的同学可以扫码联系老师咨询(点击文字转跳至PostgreSQL PGCA纲)