• 售前

  • 售后

热门帖子
入门百科

基于postgresql数据库锁表问题的解决

[复制链接]
制菜参力 显示全部楼层 发表于 2021-10-26 12:57:01 |阅读模式 打印 上一主题 下一主题
查询是否锁表了
  1. select oid from pg_class where relname='可能锁表了的表'
  2. select pid from pg_locks where relation='上面查出的oid'
复制代码
如果查询到告终果,表示该表被锁 则必要开释锁定
  1. select pg_cancel_backend(上面查到的pid)
复制代码
补充:PostgreSQL 办理锁表、死锁题目
1.-- 查询ACTIVITY的状态等信息
  1. SELECT T
  2. .PID,
  3. T.STATE,
  4. T.QUERY,
  5. T.WAIT_EVENT_TYPE,
  6. T.WAIT_EVENT,
  7. T.QUERY_START
  8. FROM
  9. PG_STAT_ACTIVITY T
  10. WHERE
  11. T.DATNAME = '数据库用户名';
复制代码
上面查询结果中:pid就是ACTIVITY的唯一标识,state就是运动状态,query就是正在实验的sql语句,query——start就是开始实验的时间。
2.-- 查询死锁的ACTIVITY
  1. SELECT T
  2. .PID,
  3. T.STATE,
  4. T.QUERY,
  5. T.WAIT_EVENT_TYPE,
  6. T.WAIT_EVENT,
  7. T.QUERY_START
  8. FROM
  9. PG_STAT_ACTIVITY T
  10. WHERE
  11. T.DATNAME = '数据库用户名'
  12. AND T.WAIT_EVENT_TYPE = 'Lock';
复制代码
3.将第二条查询语句的pid字段的数字值记录下来,实验下面的查询语句可以解锁:
-- 通过pid解锁对应的ACTIVITY
  1. select PG_CANCEL_BACKEND('6984');
复制代码
上面的查询语句,实验了pg_cancel_backend()函数,该函数是取消背景操作,回滚未提交事物的用途。
4.办理idle in transaction
  1. select pg_terminate_backend ('21967')
复制代码
以上为个人履历,希望能给各人一个参考,也希望各人多多支持草根技术分享。如有错误或未思量完全的地方,望不吝见教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作