惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

博客园 - 马建康

liunx修改字体为宋体 OpenERP|odoo Web开发 PostgreSQL源码分析之shared buffer与磁盘文件 如何更改postgresql的最大连接数 [Ubuntu]明明白白安装中文字体 Ubuntu 所需要的中文字体美化操作步骤 Ubuntu 字体设置:使用Windows 字体 Ubuntu下中文完美解决方案 fonts.conf 中文手册 PostgreSql 合并多行记录 Ubuntu 字体设置:使用Windows 字体 Ubuntu 12.04 LTS安装Windows字体 彻底解决Odoo8.0单时区应用中的时区问题 PostgreSQL中COUNT的各条件下(1亿条数据)例子 Git详解之三 Git分支 ubuntu下修改文件夹权限 Ubuntu中Nginx的安装与配置 Linux下解决 id_rsa 权限不够 Ubuntu Server 13.10 安装配置图解教程
Postgresql死锁的处理
马建康 · 2015-07-28 · via 博客园 - 马建康

今天遇到一个奇怪的现象,select和delete表时正常执行,但truncate和drop表时会一直运行,也不报错。

查了些资料才发现问题的原因,总结如下:

"drop table " 和 "truncate table " 需要申请排它锁 "ACCESS EXCLUSIVE ", 执行这个命令卡住时,说明此时这张表上还有操作正在进行,比如查询等,
那么只有等待这个查询操作完成,"drop table" 或"truncate table"或者增加字段的SQL 才能获取这张表上的 "ACCESS EXCLUSIVE" 锁 ,操作才能进行下去。

1.检索出死锁进程的ID。

SELECT * FROM pg_stat_activity WHERE datname='死锁的数据库ID ';

检索出来的字段中,【wating 】字段,数据为t的那条,就是死锁的进程。找到对应的【procpid 】列的值。

2.将进程杀掉。

SELECT pg_cancel_backend('死锁那条数据的procpid值 ');

结果:运行完后,再次更新这个表,sql顺利执行。

如果pg_stat_activity 没有记录,则查询pg_locks是否有这个对象的锁

select oid,relname from pg_class where relname='table name';


select locktype,pid,relation,mode,granted,* from pg_locks where relation= '上面查询出来的oid';

select pg_cancel_backend('进程ID');

 另外pg_terminate_backend()函数也可以杀掉进程。