postgreSql锁与相关操作的冲突

参考来源:官方文档

序号表级锁的方式获取该锁所执行的sql操作相冲突的模式相冲突的操作说明
1 ACCESS SHARE select操作 EXCLUSIVEACCESS EXCLUSIVE锁模式

阻塞执行:

1 REFRESH MATERIALIZED VIEW CONCURRENTLY

2 ALTER TABLEDROP TABLETRUNCATEREINDEXCLUSTERVACUUM FULLREFRESH MATERIALIZED VIEW(不带CONCURRENTLY),以及很多形式的ALTER INDEXALTER TABLE变体操作。

 反之亦然

 
2 ROW EXCLUSIVE

UPDATEDELETEINSERT操作

与SHARESHARE ROW EXCLUSIVE

EXCLUSIVEACCESS EXCLUSIVE锁模式冲突

阻塞执行:

1 CREATE INDEX(不带CONCURRENTLY

CREATE TRIGGER和某些形式的 ALTER TABLE

3 REFRESH MATERIALIZED VIEW CONCURRENTLY

在执行增删改操作时,不会阻塞另一个增删改操作。
2 SHARE UPDATE EXCLUSIVE

VACUUM(不带FULL)、ANALYZE、 

CREATE INDEX CONCURRENTLY

REINDEX CONCURRENTLY、 

CREATE STATISTICS

以及某些ALTER INDEX

 ALTER TABLE的变体获得

SHARE UPDATE EXCLUSIVESHARE

SHARE ROW EXCLUSIVEEXCLUSIVE

ACCESS EXCLUSIVE锁模式冲突。这种模式

保护一个表不受并发模式改变和VACUUM运行的影响

阻塞执行:

1 VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE的变体

CREATE INDEX(不带CONCURRENTLY

CREATE TRIGGER和某些形式的 ALTER TABLE

4REFRESH MATERIALIZED VIEW CONCURRENTLY

5由ALTER TABLEDROP TABLETRUNCATEREINDEXCLUSTERVACUUM FULLREFRESH MATERIALIZED VIEW(不带CONCURRENTLY)命令获取

在执行CREATE INDEX CONCURRENTLY 时可以对数据进行增删改,因此创建索引时应该采用这个命令。

 

pgsql的autovacuum命令不阻塞增删改操作

4 SHARE CREATE INDEX(不带CONCURRENTLY取得。

ROW EXCLUSIVE

SHARE UPDATE EXCLUSIVE

SHARE ROW EXCLUSIVE

EXCLUSIVEACCESS EXCLUSIVE锁模式冲突。

这种模式保护一个表不受并发数据改变的影响

在执行create index操作时,无法对表进行如下操作:

1增删改操作

VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE及变体

在执行create index 时无法对数据进行增删改。

 

5 SHARE ROW EXCLUSIVE CREATE TRIGGER和某些形式的ALTER TABLE

ROW EXCLUSIVESHARE UPDATE EXCLUSIVE

SHARESHARE ROW EXCLUSIVE

EXCLUSIVEACCESS EXCLUSIVE锁模式冲突。

这种模式保护一个表不受并发数据修改所影响,

并且是自排他的,这样在一个时刻只能有一个会话持有它。

阻塞操作:

1 增删改

2 1 VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE的变体

CREATE INDEX(不带CONCURRENTLY

CREATE TRIGGER和某些形式的 ALTER TABLE

ALTER TABLEDROP TABLETRUNCATEREINDEXCLUSTERVACUUM FULLREFRESH MATERIALIZED VIEW(不带CONCURRENTLY

 
6 EXCLUSIVE REFRESH MATERIALIZED VIEW CONCURRENTLY

ROW SHAREROW EXCLUSIVE

SHARE UPDATE EXCLUSIVE

SHARESHARE ROW EXCLUSIVE

EXCLUSIVEACCESS EXCLUSIVE锁模式冲突。

这种模式只允许并发的ACCESS SHARE锁,

即只有来自于表的读操作可以与一个持有

该锁模式的事务并行处理。

   
7 ACCESS EXCLUSIVE

ALTER TABLEDROP TABLETRUNCATE

REINDEXCLUSTERVACUUM FULLREFRESH MATERIALIZED VIEW(不带CONCURRENTLY

命令获取。 很多形式的ALTER INDEXALTER TABLE也在这个层面上获得锁

与所有模式的锁冲突(ACCESS SHARE

ROW SHAREROW EXCLUSIVE

SHARE UPDATE EXCLUSIVE

SHARESHARE ROW EXCLUSIVEEXCLUSIVEACCESS EXCLUSIVE)。

这种模式保证持有者是访问该表的唯一事务。

阻塞所有操作  

 

序号行锁模式操作冲突的锁和操作说明
1 FOR UPDATE 任何在一行上的DELETE命令会获得FOR UPDATE锁模式,在某些列上修改值的UPDATE也会获得该锁模式。 UPDATEDELETESELECT FOR UPDATESELECT FOR NO KEY UPDATESELECT FOR SHARE或者SELECT FOR KEY SHARE这些行的事务将被阻塞 FOR UPDATE会导致由SELECT语句检索到的行被锁定,就好像它们要被更新。这可以阻止它们被其他事务锁定、修改或者删除,一直到当前事务结束。
2 FOR NO KEY UPDATE UPDATE也会获得这种锁模式    
3 FOR SHARE   UPDATEDELETESELECT FOR UPDATE或者SELECT FOR NO KEY UPDATE将被阻塞 不会阻止它们执行SELECT FOR SHARE或者SELECT FOR KEY SHARE
4 FOR KEY SHARE   SELECT FOR UPDATE会被阻塞 SELECT FOR NO KEY UPDATE不会被阻塞
posted @   小兵要进步  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)

侧边栏
点击右上角即可分享
微信分享提示