Postgresql锁机制详解(表锁和行锁)
在这种情况下,事务申明的表锁同样可以避免并发的修改,但是并不能保证该事务能够读取到最新提交的数据。共享行排他锁将能够保证在同一时间只有当前事务能够运行。ROW EXCLUSIVE和SHARE,SHARE ROW EXCLUSIVE和ACCESS EXCLUSIVE锁冲突。由CREATE INDEX命令获得。被DROP TABLE,TRUNCATE,REINDEX,CLUSTER,VACUUM FULL和REFRESH MATERIALIZED VIEW命令自动获取。这使得该行可以防止被其他的事务获取锁或者进行更改删除操作,也就是说其他事务的操作会被阻塞直到当前事务结束;同样的,SELECT FOR UPDATE命令会等待直到前一个事务结束。目前当使用确定的唯一索引时使用UPDATE命令可以获取到该锁,但是未来可能会改变这种设计。FOR NO KEY UPDATE和FOR UPDATE命令类似,但是对于获取锁的要求更加宽松一些,在同一行中不会阻塞SELECT FOR KEY SHARE命令。
用户评论