PostgreSQL 修改表结构卡住不动

目录

  • [1 问题](#1 问题)
  • [2 实现](#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)

相关推荐
东阳马生架构2 小时前
MySQL底层概述—1.InnoDB内存结构
java·数据库·mysql
standxy2 小时前
通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
android·数据库·mysql
itwangyang5202 小时前
2025 - 科研神器 - 批量处理 PDF、SVG、PNG 和 JPG 文件,将它们转换为彩色 TIFF 文件,并保存到指定的 tiff 文件夹中
数据库·pdf
痞老板A小安装C43 小时前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
feilieren3 小时前
DataGrip 连接 Redis、TongRDS
数据库·redis·缓存
液态不合群3 小时前
Redis中常见的数据类型及其应用场景
数据库·redis·wpf
Allen Bright3 小时前
Jedis存储一个-以String的形式的对象到Redis
数据库·redis·缓存
Allen Bright4 小时前
Jedis存储一个以byte[]的形式的对象到Redis
数据库·redis·缓存
NiNg_1_2344 小时前
Redis中的zset用法详解
数据库·redis·缓存
尘浮生5 小时前
Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序