DBMS には隔離レベルと言うのがあって、 PostgreSQL の場合少し特殊みたいです。
デフォルトでは Read Committed なんだけど、 Transaction 中の Update 後に、他の Transaction による SELECT は Commit を待たずに実行できるようだ。
trans1 | trans2 --------+-------- BEGIN; |BEGIN; UPDATE; | |SELECT; <- update 前のレコードを参照 COMMIT; | |SELECT; <- update 後のレコードを参照更新-更新
trans1 | trans2 --------+-------- BEGIN; |BEGIN; UPDATE; | |UPDATE; <- COMMIT/ROLLBACK されるまで待つ COMMIT; | <- COMMIT された内容に対して UPDATE を実行 |COMMIT;SQLServer だと SELECT も待つんだけどね。だって Transaction 中はそのデータが Commit されるか Rollback されるか分からない状態なわけだからです。