资讯专栏INFORMATION COLUMN

pg运维踩坑记

IT那活儿 / 2172人阅读
pg运维踩坑记


一. 杀会话


都知道可以通过数据库查到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。

我们做下删除操作

yxptest=> c yxptest root
yxptest=# drop user test;

这样的删除操作,是会报依赖关系的错误。

常规办法,是一个个解除依赖,但是pg有个快速的方法,如下所示

yxptest=# drop owned by test cascade;
yxptest=# drop user test;

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

drop owned by test cascade 会把所有对象的owner是test的删除,包括数据之类的。

这点我们需要再三确认,如果不是很确定,可以先做一个如下操作。

yxptest=# REASSIGN OWNED BY test TO root;
yxptest=# drop user test;

这样可以确保这个用户下的对象的保留。

运维的坑总会不经意间出现,记得填好自己。


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129804.html

相关文章

  • webpack4 坑记

    最近偶然想学习下webpack的配置,于是走上了webpack4踩坑的不归路。。。 webpack4默认的特性: 配置默认初始化一些配置, 比如 entry 默认 ./src 开发模式和发布模式, 插件默认内置 CommonsChunk 配置简化 使用 ES6 语法,比如 Map, Set, includes 新增 WebAssembly 构建支持 如果要使用 webpack cli 命令,...

    lookSomeone 评论0 收藏0
  • react使用坑记(一)

    摘要:本文主要介绍在移动端项目中如何使用及其配置使用脚手架生成的项目,后运行弹出配置项,该命令不可逆哦。使用了作为计算依据,因此需要在中贴上以下代码,并没有使用淘宝的方案使用的设计图是的哦配置的按需加载当然了,你需要先。 本文主要介绍在react移动端项目中如何使用antd-mobile2及其配置 使用 create-react-app脚手架生成的项目,后运行npm run eject 弹出...

    toddmark 评论0 收藏0
  • react使用坑记(一)

    摘要:本文主要介绍在移动端项目中如何使用及其配置使用脚手架生成的项目,后运行弹出配置项,该命令不可逆哦。使用了作为计算依据,因此需要在中贴上以下代码,并没有使用淘宝的方案使用的设计图是的哦配置的按需加载当然了,你需要先。 本文主要介绍在react移动端项目中如何使用antd-mobile2及其配置 使用 create-react-app脚手架生成的项目,后运行npm run eject 弹出...

    _ang 评论0 收藏0
  • sessionStorge和localStorage的使用-坑记_09

    摘要:的使用属性允许你访问一个对象。它与相似,不同之处在于里面存储的数据没有过期时间设置,而存储在里面的数据在页面会话结束时会被清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。 sessionStorge的使用 sessionStorage 属性允许你访问一个 session Storage 对象。它与 localStorage 相似,不同之处在于 lo...

    Jochen 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<