テーブルレベルロックの競合表
PostgreSQLのロックについて学習中。ここでテーブルレベルロックの競合表は発見したのだけど、「SHARE UPDATE EXCLUSIVE」とかいわれても良くわからんので、具体的な操作/コマンド名に置き換えてみた。○は競合しない、×は競合するです。
select | select for update | insert,update,delete | FULLなしのVACUUM, create index concurrently | create index | alter table, drop table,VACUUM FULL | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
select | ○ | ○ | ○ | ○ | ○ | × | |||||||
select for update | ○ | ○ | ○ | ○ | ○ | × | |||||||
insert,update,delete | ○ | ○ | ○ | ○ | × | × | |||||||
FULLなしのVACUUM, create index concurrently | ○ | ○ | ○ | × | × | × | |||||||
create index | ○ | ○ | × | × | × | × | |||||||
alter table, drop table,VACUUM FULL | × | × | × | × | × | × |
あと、これとは別に行ロックがあって、たとえば「select for update」された行はそのトランザクションがコミットされるまで更新できない(はず)。この表だけだとブロックされないように見えるので注意(なはず)。