PG 锁

参考:https://postgres.fun/20100921154343.html

表级锁类型

表级锁类型分为八种,以下对各种表级锁类型进行简单介绍下, 锁的冲突模式可以参考3.1的图一:表级锁冲突模式。

  • ACCESS SHARE
    “ACCESS SHARE”锁模式只与“ACCESS EXCLUSIVE” 锁模式冲突;查询命令(Select command)将会在它查询的表上获取”Access Shared” 锁,一般地,任何一个对表上的只读查询操作都将获取这种类型的锁。

  • ROW SHARE
    “Row Share” 锁模式与”Exclusive’和”Access Exclusive”锁模式冲突;”Select for update”和”Select for share”命令将获得这种类型锁,并且所有被引用但没有 FOR UPDATE 的表上会加上”Access shared locks”锁。

  • ROW EXCLUSIVE
    “Row exclusive” 与 “Share,Shared roexclusive,Exclusive,Access exclusive”模式冲突;“Update,Delete,Insert”命令会在目标表上获得这种类型的锁,并且在其它被引用的表上加上”Access shared”锁,一般地,更改表数据的命令都将在这张表上获得”Row exclusive”锁。

  • SHARE UPDATE EXCLUSIVE
    ”Share update exclusive,Share,Share row ,exclusive,exclusive,Access exclusive”模式冲突,这种模式保护一张表不被并发的模式更改和VACUUM;“Vacuum(without full), Analyze ”和 “Create index concurrently”命令会获得这种类型锁。

  • SHARE
    与“Row exclusive,Shared update exclusive,Share row exclusive ,Exclusive,Access exclusive”锁模式冲突,这种模式保护一张表数据不被并发的更改;“Create index”命令会获得这种锁模式。

  • SHARE ROW EXCLUSIVE
    与“Row exclusive,Share update exclusive,Shared,Shared row exclusive,Exclusive,Access Exclusive”锁模式冲突;任何Postgresql 命令不会自动获得这种锁。

  • EXCLUSIVE
    与” ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE”模式冲突,这种索模式仅能与Access Share 模式并发,换句话说,只有读操作可以和持有”EXCLUSIVE”锁的事务并行;任何Postgresql 命令不会自动获得这种类型的锁;

  • ACCESS EXCLUSIVE
    与所有模式锁冲突(ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE),这种模式保证了当前只有一个事务访问这张表; “ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL” 命令会获得这种类型锁,在Lock table 命令中,如果没有申明其它模式,它也是缺省模式。

表级锁冲突模式

PG 锁_第1张图片

备注:上图是 PostgreSQL 表级锁的各种冲突模式对照表,红色的‘X’表示冲突项, 在章节四中会对其中典型的锁模式进行模似演示。

实验

参考:https://postgres.fun/20100921154343.html

你可能感兴趣的:(PG 锁)