PostgreSQL トランザクション分離レベルv9.6 2017/5

Reed Committed (コミット読み取り) デフォルト

Transaction 1
testdb=# BEGIN; 
BEGIN
testdb=# SELECT * FROM test_table_2;
 col1 | col2
------+------
    1 | A
    2 | B
    3 | C
(3 行)




testdb=# SELECT * FROM test_table_2;
 col1 | col2
------+------
    1 | A
    2 | B
    3 | C
(3 行)
/* コミット前の右の更新はまだ反映されていない。 */


testdb=# SELECT * FROM test_table_2;
 col1 | col2
------+------
    2 | B
    3 | C
    1 | D
(3 行)
/* コミットした右の更新が反映される。 */

testdb=# COMMIT;
COMMIT
Transaction 2
testdb=# BEGIN;
BEGIN
testdb=# SELECT * FROM test_table_2;
 col1 | col2
------+------
    1 | A
    2 | B
    3 | C
(3 行)

testdb=# UPDATE test_table_2 SET col2='D' WHERE col1= 1;
UPDATE 1

testdb=# SELECT * FROM test_table_2;
 col1 | col2
------+------
    2 | B
    3 | C
    1 | D
(3 行)

testdb=# COMMIT;
COMMIT
※ 自トランザクションをCOMMITあるいはROLLBACKしていなくても他のトランザクションのCOMMITした結果を見られる。
 →同一トランザクション内でも他トランザクションのコミットした結果の影響を受ける。