合 PG中有哪些结束会话的命令(pg_cancel_backend、pg_terminate_backend、pg_ctl kill等)
Tags: PGpg_cancel_backendpg_ctlpg_terminate_backend取消SQL结束会话
PG中有哪些结束会话的命令
pg_cancel_backend和pg_terminate_backend
pg_cancel_backend取消对后端进程具有指定进程ID的会话的当前查询。 如果调用角色是后端被取消的角色的成员,或者调用角色被授予pg_signal_backend
,也允许这样做,但是只有超级用户才能取消超级用户后端。
pg_terminate_backend终止后端进程具有指定进程ID的会话。 如果调用角色是后端被终止的角色的成员,或者调用角色被赋予pg_signal_backend
,那么也允许这样做,但是只有超级用户才能终止超级用户后端。
区别:pg_cancel_backend 只是取消当前某一个进程的查询操作,但不能释放数据库连接。但pg_terminate_backend可以在pg的后台杀死这个进程,从而释放出宝贵的连接资源,类似于kill -9 pid
操作。
两者都是boolean 类型的,返回为true 或者false 。
pg_signal_backend角色想要允许管理员启用受信任的、但是非超级用户的、发送信号给其他后端的角色。 当前,此角色允许发送信号以取消另一个后端上的查询或终止其会话。不过授予此角色的用户不能向属于超级用户的后端发送信号。
pg_cancel_backend
和pg_terminate_backend
向由进程 ID 标识的后端进程发送信号(分别是SIGINT或SIGTERM)。 一个活动后端的进程 ID可以从pg_stat_activity
视图的pid
列中找到,或者通过在服务器上列出postgres
进程(在 Unix 上使用ps或者在Windows上使用任务管理器)得到。 一个活动后端的角色可以在pg_stat_activity
视图的usename
列中找到。