暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

云贝教育【PGCE题目解析1】PG中取消一个长时间执行的会话,pg_cancel_backend()和pg_terminate_backend()都会杀死进程的。

原创 云贝教育陈老师 2023-11-07
258

考试科目:PGCE-E-091

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

通过分数:60%

考试时间:60min

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

需要通过PGCA、PGCE、PGCM、PGCH内核开发认证考试的同学可以联系云贝陈老师19941464235(微信同号)


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会中止进程。



需要通过PGCA、PGCE、PGCM、PGCH内核开发认证考试的同学可以联系云贝陈老师19941464235(微信同号)




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论