From 23c33198b961f27c80655a7cf439d49ef5a1833d Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 11 May 2015 12:02:10 -0400 Subject: docs: add "serialization anomaly" to transaction isolation table Also distinguish between SQL-standard and Postgres behavior. Report by David G. Johnston --- doc/src/sgml/mvcc.sgml | 67 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 19 deletions(-) (limited to 'doc/src/sgml/mvcc.sgml') diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index 313198800c..385691e21e 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.sgml @@ -143,6 +143,20 @@ + + + + serialization anomaly + serialization anomaly + + + + The result of successfully committing a group of transactions + is inconsistent with all possible orderings of running those + transactions one at a time. + + + @@ -150,13 +164,13 @@ transaction isolation level - The four transaction isolation levels and the corresponding - behaviors are described in . + The SQL standard and PostgreSQL-implemented transaction isolation levels + are described in . - Standard <acronym>SQL</acronym> Transaction Isolation Levels - + Transaction Isolation Levels + @@ -171,6 +185,9 @@ Phantom Read + + Serialization Anomaly + @@ -178,6 +195,9 @@ Read uncommitted + + Allowed, but not in PG + Possible @@ -202,6 +222,9 @@ Possible + + Possible + @@ -214,6 +237,9 @@ Not possible + + Allowed, but not in PG + Possible @@ -232,27 +258,30 @@ Not possible + + Not possible +
- In PostgreSQL, you can request any of the - four standard transaction isolation levels. But internally, there are - only three distinct isolation levels, which correspond to the levels Read - Committed, Repeatable Read, and Serializable. When you select the level Read - Uncommitted you really get Read Committed, and phantom reads are not possible - in the PostgreSQL implementation of Repeatable - Read, so the actual - isolation level might be stricter than what you select. This is - permitted by the SQL standard: the four isolation levels only - define which phenomena must not happen, they do not define which - phenomena must happen. The reason that PostgreSQL - only provides three isolation levels is that this is the only - sensible way to map the standard isolation levels to the multiversion - concurrency control architecture. The behavior of the available - isolation levels is detailed in the following subsections. + In PostgreSQL, you can request any of + the four standard transaction isolation levels, but internally only + three distinct isolation levels are implemented, i.e. PostgreSQL's + Read Uncommitted mode behaves like Read Committed. This is because + it is the only sensible way to map the standard isolation levels to + PostgreSQL's multiversion concurrency control architecture. + + + + The table also shows that PostgreSQL's Repeatable Read implementation + does not allow phantom reads. Stricter behavior is permitted by the + SQL standard: the four isolation levels only define which phenomena + must not happen, not which phenomena must happen. + The behavior of the available isolation levels is detailed in the + following subsections. -- cgit v1.2.1