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

Repeatable Read (反復読み取り)
※ 同一トランザクション内で同じ結果が返る。

Transaction 1
testdb=# BEGIN; 
BEGIN
testdb=# SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET
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
------+------
    1 | A
    2 | B
    3 | C
(3 行)
/* 右でコミットしてもアップデートは左に反映されない。 */

testdb=# COMMIT;
COMMIT

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した結果を見られない。
 →同一トランザクション中は他トランザクションの影響を受けない。