在postgresql中执行sql时添加了什么锁?

时间:2017-01-20 13:39:17

标签: postgresql

当我执行插入,删除和更新操作时,表中添加了哪些锁?

我想知道选择insert delete update vacuum create index。

1 个答案:

答案 0 :(得分:1)

访问分享

仅与ACCESS EXCLUSIVE锁定模式冲突。 SELECT命令在引用的表上获取此模式的锁定。通常,任何只读取表但不修改表的查询都将获得此锁定模式。

行分享

与EXCLUSIVE和ACCESS EXCLUSIVE锁定模式冲突.SELECT FOR UPDATE和SELECT FOR SHARE命令在目标表上获取此模式的锁定(除了在引用的任何其他表上的ACCESS SHARE锁定之外)未选择FOR UPDATE / FOR SHARE)。

ROW EXCLUSIVE

与SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE锁定模式冲突。命令UPDATE,DELETE和INSERT在目标表上获取此锁定模式(除了任何其他引用表上的ACCESS SHARE锁定)。通常,此锁定模式将由修改表中数据的任何命令获取。

SHARE UPDATE EXCLUSIVE

与SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE锁定模式冲突。此模式保护表不受并发模式更改和VACUUM运行的影响。由VACUUM(无FULL),ANALYZE,CREATE INDEX,以及ALTER TABLE VALIDATE和其他ALTER TABLE变体获取(有关完整详细信息,请参阅ALTER TABLE)。

SHARE

与ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE ROW EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE锁定模式冲突。此模式保护表不受并发数据更改的影响。由CREATE INDEX获取(不同时)。

SHARE ROW EXCLUSIVE

与ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE锁定模式冲突。此模式保护表不受并发数据更改的影响,并且是独占的,因此一次只能有一个会话保存它。由CREATE TRIGGER和多种形式的ALTER TABLE获取(参见ALTER TABLE)。

EXCLUSIVE

与ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHOW ROW EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE锁定模式冲突。此模式仅允许并发ACCESS SHARE锁,即只有来自表的读取可以与持有此锁定模式的事务并行进行。同时获得REFRESH MATERIALIZED VIEW。

ACCESS EXCLUSIVE

与所有模式的锁冲突(ACCESS SHARE,ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE)。此模式保证持有者是以任何方式访问表的唯一事务。由DROP TABLE,TRUNCATE,REINDEX,CLUSTER,VACUUM FULL和REFRESH MATERIALIZED VIEW(没有同时发生)命令获取。许多形式的ALTER TABLE也在此级别获得锁定。这也是未明确指定模式的LOCK TABLE语句的默认锁定模式。

如何查看我在表格中添加的锁?

select * from pg_locks where relation='yourtablename'::regclass;

SQL对应于锁sql lock

https://www.postgresql.org/docs/9.6/static/explicit-locking.html