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

客服微信

【PostgreSQL PGCE-091题目解析18】PG中取消一个长时间执行的会话,pg_cancel_backend()和pg_terminate_backend()都会杀死进程的。

作者:刘峰
原创
发布时间:2023-12-22 17:40
浏览量:681

考试科目PGCE-E-091

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

通过分数:60%

考试时间:60min

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





PG中取消一个长时间执行的会话,pg_cancel_backend()和pg_terminate_backend()都会杀死进程的。

A 正确

B 错误


参考答案:B





解析


查看官方文档的解释

pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) → boolean

终止其后端进程具有指定进程 ID 的会话。如果调用角色是正在终止后端的角色的成员或者调用角色具有 pg_signal_backend 权限,则也允许这样做,但是只有超级用户可以终止超级用户后端。


如果超时未指定或为零,则无论进程是否实际终止,该函数都返回 true,仅指示信号发送成功。如果指定了超时(以毫秒为单位)并且大于零,则该函数将等待,直到进程实际终止或给定的时间已过。如果进程终止,该函数返回 true。超时时,会发出警告并返回 false


pg_cancel_backend ( pid integer ) → boolean

取消当前查询指定进程ID的后端进程的会话。如果调用角色是正在取消后端的角色的成员或者调用角色具有 pg_signal_backend 权限,则也允许这样做,但是只有超级用户可以取消超级用户后端。


模拟实验pg_cancel_backend


1、开启一个连接,查看进程ID

testdb=# select pg_backend_pid();
 pg_backend_pid 
----------------
          10918
(1 row)



2、执行一个insert语句

testdb=# select count(1) from t1;
  count  
---------
 1048576
(1 row)
testdb=# insert into t1 select * from t1;
。。。执行中。。。


3、另开一个窗口执行pg_cancel_backend

testdb=# select pg_cancel_backend(10918);
 pg_cancel_backend 
-------------------
 t
(1 row)


4、发现第一个窗口的insert语句被取消

testdb=# insert into t1 select * from t1;
ERROR:  canceling statement due to user request


模拟实验pg_terminate_backend



1、开启一个连接,查看进程ID

testdb=# select pg_backend_pid();
 pg_backend_pid 
----------------
          12070
(1 row)


2、执行一个insert语句

testdb=# select count(1) from t1;
  count  
---------
 2097152
(1 row)
testdb=# insert into t1 select * from t1;
。。。执行中。。。


3、另开一个窗口执行pg_terminate_backend

testdb=# select pg_terminate_backend (12070);
 pg_cancel_backend 
-------------------
 t
(1 row)


4、发现第一个窗口的insert语句被取消

testdb=# insert into t1 select * from t1;
FATAL:  terminating connection due to administrator command
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.


总结:

从上面实验可以确认,只有pg_terminate_backend会中止进程。



PostgreSQL PGCE考试为理论考试,需通过两门考试才能拿到“PostgreSQL PGCE证书”。



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


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



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