- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- PostgreSQL/SQL/ロック/EXCLUSIVE MODE へ行く。
- 1 (2012-04-19 (木) 17:37:03)
ロック
EXCLUSIVE MODE
1. taroがロックを掛けて、INSERTを実行
taro=# SELECT * FROM t1; num ----- 1 2 (2 行)
taro=# BEGIN;LOCK TABLE t1 IN EXCLUSIVE MODE; taro=# INSERT INTO t1 ( num ) SELECT MAX(num) + 1 FROM t1; taro=# SELECT * FROM t1;
num ----- 1 2 3 (3 行)
この時点でまだCOMMITしない。
2. hanaがINSERTを実行
hana=# SELECT * FROM t1; num ----- 1 2 (2 行)
SELECTは実行できるが、結果には1.のINSERTは反映されてない。
hana=# INSERT INTO t1 ( num ) SELECT MAX(num) + 1 FROM t1;
このINSERTはブロックされる。
3. taroがCOMMITを実行
taro=# COMMIT;
このCOMMITにより、2.のINSERTのブロックが解除される。
taro=# SELECT * FROM t1; num ----- 1 2 3 4 (4 行)
numの値"3"が1.の、"4"が2.のINSERTを反映している。
参考
http://www.postgresql.jp/document/current/html/sql-lock.html