行ロック - FOR UPDATE
Session A | Session B
========================================================================================================
=> BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE; |
BEGIN |
id | n |
----+----- |
1 | 200 |
(1 row) |
|
# (1) ↑のSELECTの結果はすぐに表示される |
| => BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE;
| BEGIN
|
| # (2) ↑のSELECTはブロックされ、すぐには表示されない
|
# (3) ↓のUPDATEがCOMMITされると、 |
|
=*> UPDATE t1 SET n = 100 WHERE id = 1; |
UPDATE 1 |
=*> COMMIT; |
COMMIT |
|
| # (4) 左のAのCOMMITが終わると、ブロックが解除されて
| # SELECTの結果が↓のように表示される
=> |
| id | n
| ----+-----
| 1 | 100
| (1 row)
|
| =*>
|