olga 发表于 2016-12-21 10:39:06

postgresql数据库锁介绍

postgresql锁介绍  1 ACCESS SHARE
  "ACCESS SHARE"锁模式只与"ACCESS EXCLUSIVE" 锁模式冲突;
  查询命令(Select command)将会在它查询的表上获取"Access Shared" 锁,一般地,任何一个对表上的只读查询操作都将获取这种类型的锁。
  2 ROW SHARE
  "Row Share" 锁模式与"Exclusive’和"Access Exclusive"锁模式冲突;
  "Select for update"和"Select for share"命令将获得这种类型锁,并且所有被引用但没有 FOR UPDATE 的表上会加上"Access shared locks"锁。
  3 ROW EXCLUSIVE
  "Row exclusive" 与 "Share,Shared roexclusive,Exclusive,Access exclusive"模式冲突;
  "Update,Delete,Insert"命令会在目标表上获得这种类型的锁,并且在其它被引用的表上加上"Access shared"锁,一般地,更改表数据的命令都将在这张表上获得"Row exclusive"锁。
  4 SHARE UPDATE EXCLUSIVE
  "Share update exclusive,Share,Share row ,exclusive,exclusive,Access exclusive"模式冲突,这种模式保护一张表不被并发的模式更改和VACUUM;
  "Vacuum(without full), Analyze "和 "Create index concurrently"命令会获得这种类型锁。
  5 SHARE
  与"Row exclusive,Shared update exclusive,Share row exclusive ,Exclusive,Access exclusive"锁模式冲突,这种模式保护一张表数据不被并发的更改;
  "Create index"命令会获得这种锁模式。
  6 SHARE ROW EXCLUSIVE
  与"Row exclusive,Share update exclusive,Shared,Shared row exclusive,Exclusive,Access Exclusive"锁模式冲突;
  任何Postgresql 命令不会自动获得这种锁。
  7 EXCLUSIVE
  与" ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE"模式冲突,这种索模式仅能与Access Share 模式并发,换句话说,只有读操作可以和持有"EXCLUSIVE"锁的事务并行;
  任何Postgresql 命令不会自动获得这种类型的锁;
  8 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 命令中,如果没有申明其它模式,它也是缺省模式。
页: [1]
查看完整版本: postgresql数据库锁介绍