本文主要是介绍postgreSql锁与相关操作的冲突,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考来源:官方文档
序号 | 表级锁的方式 | 获取该锁所执行的sql操作 | 相冲突的模式 | 相冲突的操作 | 说明 |
1 |
ACCESS SHARE |
select操作 |
EXCLUSIVE 和ACCESS EXCLUSIVE 锁模式 |
阻塞执行:
1 REFRESH MATERIALIZED VIEW CONCURRENTLY
2 ALTER TABLE 、DROP TABLE 、TRUNCATE 、REINDEX 、CLUSTER 、VACUUM FULL 和REFRESH MATERIALIZED VIEW (不带CONCURRENTLY ),以及很多形式的ALTER INDEX 和ALTER TABLE变体操作。
反之亦然
|
|
2 |
ROW EXCLUSIVE |
UPDATE 、DELETE 、 INSERT操作
|
与SHARE 、SHARE ROW EXCLUSIVE 、
EXCLUSIVE 和ACCESS EXCLUSIVE 锁模式冲突
|
阻塞执行:
1 CREATE INDEX (不带CONCURRENTLY )
2 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 EXCLUSIVE 、SHARE 、
SHARE ROW EXCLUSIVE 、EXCLUSIVE 和
ACCESS EXCLUSIVE 锁模式冲突。这种模式
保护一个表不受并发模式改变和VACUUM 运行的影响
|
阻塞执行:
1 VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE的变体
2 CREATE INDEX (不带CONCURRENTLY )
3 CREATE TRIGGER 和某些形式的 ALTER TABLE
4REFRESH MATERIALIZED VIEW CONCURRENTLY
5由ALTER TABLE 、DROP TABLE 、TRUNCATE 、REINDEX 、CLUSTER 、VACUUM FULL 和REFRESH MATERIALIZED VIEW (不带CONCURRENTLY )命令获取
|
在执行CREATE INDEX CONCURRENTLY 时可以对数据进行增删改,因此创建索引时应该采用这个命令。
pgsql的autovacuum命令不阻塞增删改操作
|
4 |
SHARE |
由CREATE INDEX (不带CONCURRENTLY 取得。 |
与ROW EXCLUSIVE 、
SHARE UPDATE EXCLUSIVE 、
SHARE ROW EXCLUSIVE 、
EXCLUSIVE 和ACCESS EXCLUSIVE 锁模式冲突。
这种模式保护一个表不受并发数据改变的影响
|
在执行create index操作时,无法对表进行如下操作:
1增删改操作
2 VACUUM (不带FULL )、ANALYZE 、 CREATE INDEX CONCURRENTLY 、REINDEX CONCURRENTLY 、 CREATE STATISTICS 以及某些ALTER INDEX 和 ALTER TABLE及变体
|
在执行create index 时无法对数据进行增删改。
|
5 |
SHARE ROW EXCLUSIVE |
由CREATE TRIGGER 和某些形式的ALTER TABLE |
与ROW EXCLUSIVE 、SHARE UPDATE EXCLUSIVE
、SHARE 、SHARE ROW EXCLUSIVE 、
EXCLUSIVE 和ACCESS EXCLUSIVE 锁模式冲突。
这种模式保护一个表不受并发数据修改所影响,
并且是自排他的,这样在一个时刻只能有一个会话持有它。
|
阻塞操作:
1 增删改
2 1 VACUUM(不带FULL)、ANALYZE、 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、 CREATE STATISTICS以及某些ALTER INDEX和 ALTER TABLE的变体
3 CREATE INDEX (不带CONCURRENTLY )
4 CREATE TRIGGER 和某些形式的 ALTER TABLE
5 ALTER TABLE 、DROP TABLE 、TRUNCATE 、REINDEX 、CLUSTER 、VACUUM FULL 和REFRESH MATERIALIZED VIEW (不带CONCURRENTLY )
|
|
6 |
EXCLUSIVE |
REFRESH MATERIALIZED VIEW CONCURRENTLY |
与ROW SHARE 、ROW EXCLUSIVE 、
SHARE UPDATE EXCLUSIVE 、
SHARE 、SHARE ROW EXCLUSIVE 、
EXCLUSIVE 和ACCESS EXCLUSIVE 锁模式冲突。
这种模式只允许并发的ACCESS SHARE 锁,
即只有来自于表的读操作可以与一个持有
该锁模式的事务并行处理。
|
|
|
7 |
ACCESS EXCLUSIVE |
由ALTER TABLE 、DROP TABLE 、TRUNCATE 、
REINDEX 、CLUSTER 、VACUUM FULL 和REFRESH MATERIALIZED VIEW (不带CONCURRENTLY )
命令获取。 很多形式的ALTER INDEX 和ALTER TABLE 也在这个层面上获得锁
|
与所有模式的锁冲突(ACCESS SHARE 、
ROW SHARE 、ROW EXCLUSIVE 、
SHARE UPDATE EXCLUSIVE 、
SHARE 、SHARE ROW EXCLUSIVE 、EXCLUSIVE 和ACCESS EXCLUSIVE )。
这种模式保证持有者是访问该表的唯一事务。
|
阻塞所有操作 |
|
这篇关于postgreSql锁与相关操作的冲突的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!