都知道可以通过数据库查到pid,然后kill -9就可以强制杀会话了,如果用Oracle和MySQL的认知做pg数据库的操作,那就大错特错了。
kill -9的危害Pg 看到一个被支持的被终止kill -9。它知道后端可能已经损坏了共享内存——例如,因为你可以在将页面写入 shm 或修改页面的过程中中断它——所以当它注意到后端突然消失时,它会终止并重新启动所有其他后端并以非零错误代码退出。正确的方法是通过下列2种方式杀进程
1. 库里调用存储过程

可以根据pg_stat_activity的几个字段找到需要杀掉的会话
通过SELECT pg_terminate_backend(pid)可以杀掉想要的会话。yxptest=# SELECT pg_terminate_backend(38531);

会话端会出现如下界面

2. 库外使用pg_ctl命令
pg_ctl kill SIGNALNAME PID
SIGNALNAME 的含义


千万不要kill -9!!!
pg建用户很简单,和我们经常操作的一样,但是删除的时候,可能让很多人头疼不已,因为会报很多依赖关系的错误。
有一个方式可以把用户的依赖全部删除,相应的后果就是用户相关的对象一并删除,属于高危操作。
下面我建一个简单用户和一个测试表
yxptest=# create user test ENCRYPTED password 'Hb_bss2021';yxptest=# \c yxptest yxptest=# create schema test authorization test;yxptest=# create table t1(id int);

这里我们可以看到schema和talbe的owner都是test。
我们做下删除操作

这样的删除操作,是会报依赖关系的错误。
常规办法,是一个个解除依赖,但是pg有个快速的方法,如下所示
yxptest=# drop owned by test cascade;yxptest=# drop user test;

这样的方法虽然省事,但是有个致命的问题,我们需要知道。

drop owned by test cascade 会把所有对象的owner是test的删除,包括数据之类的。
这点我们需要再三确认,如果不是很确定,可以先做一个如下操作。

这样可以确保这个用户下的对象的保留。
运维的坑总会不经意间出现,记得填好自己。

更多精彩干货分享
点击下方名片关注
IT那活儿





