postgreSql锁与相关操作的冲突
参考来源:官方文档
序号 | 表级锁的方式 | 获取该锁所执行的sql操作 | 相冲突的模式 | 相冲突的操作 | 说明 |
---|---|---|---|---|---|
1 | ACCESS SHARE | select操作 | EXCLUSIVE 和ACCESS EXCLUSIVE 锁模式 |
|
|
2 | ROW EXCLUSIVE |
|
|
阻塞执行:
2
|
在执行增删改操作时,不会阻塞另一个增删改操作。 |
2 | SHARE UPDATE EXCLUSIVE |
以及某些 |
与
保护一个表不受并发模式改变和 |
阻塞执行: 1 VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE的变体 2 3
|
在执行CREATE INDEX CONCURRENTLY 时可以对数据进行增删改,因此创建索引时应该采用这个命令。
pgsql的autovacuum命令不阻塞增删改操作 |
4 | SHARE | 由CREATE INDEX (不带CONCURRENTLY 取得。 |
与
这种模式保护一个表不受并发数据改变的影响 |
在执行create index操作时,无法对表进行如下操作: 1增删改操作 2 |
在执行create index 时无法对数据进行增删改。
|
5 | SHARE ROW EXCLUSIVE | 由CREATE TRIGGER 和某些形式的ALTER TABLE |
与 、
这种模式保护一个表不受并发数据修改所影响, 并且是自排他的,这样在一个时刻只能有一个会话持有它。 |
阻塞操作: 1 增删改 2 1 VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE的变体 3 4
|
|
6 | EXCLUSIVE | REFRESH MATERIALIZED VIEW CONCURRENTLY |
与
这种模式只允许并发的 即只有来自于表的读操作可以与一个持有 该锁模式的事务并行处理。 |
||
7 | ACCESS EXCLUSIVE |
由
命令获取。 很多形式的 |
与所有模式的锁冲突(
这种模式保证持有者是访问该表的唯一事务。 |
阻塞所有操作 |
序号 | 行锁模式 | 操作 | 冲突的锁和操作 | 说明 |
---|---|---|---|---|
1 | FOR UPDATE | 任何在一行上的DELETE 命令会获得FOR UPDATE 锁模式,在某些列上修改值的UPDATE 也会获得该锁模式。 |
UPDATE 、DELETE 、SELECT FOR UPDATE 、SELECT FOR NO KEY UPDATE 、SELECT FOR SHARE 或者SELECT FOR KEY SHARE 这些行的事务将被阻塞 |
FOR UPDATE 会导致由SELECT 语句检索到的行被锁定,就好像它们要被更新。这可以阻止它们被其他事务锁定、修改或者删除,一直到当前事务结束。 |
2 | FOR NO KEY UPDATE | UPDATE 也会获得这种锁模式 |
||
3 | FOR SHARE | UPDATE 、DELETE 、SELECT 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 不会被阻塞 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)