cn结尾的网站 做外贸,大连建设工程信息网怎么没有了,自己的电脑做网站服务器,免费网页代码大全目录 1 问题2 实现 1 问题
今天遇到的一个问题记录一下#xff0c;因为系统上的一个改动需要同步脚本至测试库上#xff0c;具体的脚本内容也很简单,就是修改了某张表的一个字段。但是无论怎么操作都是一直卡住#xff0c;表的数据量很小就十几条数据所以初步怀疑是表被锁了… 目录 1 问题2 实现 1 问题
今天遇到的一个问题记录一下因为系统上的一个改动需要同步脚本至测试库上具体的脚本内容也很简单,就是修改了某张表的一个字段。但是无论怎么操作都是一直卡住表的数据量很小就十几条数据所以初步怀疑是表被锁了。后经查证确实是被锁住了。
2 实现
查询表锁SQL select * from pg_locks where relation (select oid from pg_class where relname‘可能锁表了的表’); 1 2 经过上述SQL查出来的记录得知了该表确实存在锁导致锁表的原因并未找到由于是测试环境我这里为了省事并没有看具体是哪个锁导致的无法修改表结构直接全部干掉如果是生产环境还是建议排查下产生锁的SQL和进程等详细信息确定了解决方案开始一阵百度找到了pg_cancel_backend函数可以用来取消进程的事务进行回滚但是事情并没有迎刃而解其中有一个锁无论如何也关不掉。不用想了肯定是这个锁导致的我无法修改表于是翻阅了官方文档找到了另一个相关的函数pg_terminate_backend使用了这个函数之后上面那个“钉子户”才终于被我干掉然后发现表确实是可以修改了完美解决。函数和对应的作用写在下方具体的更多的使用大家可以参阅官网文档。
取消函数和中断函数 –取消后台操作回滚未提交事物 select pg_cancel_backend(上面查到的pid) –中断session回滚未提交事物 select pg_terminate_backend(上面查到的pid)