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 313198800cb..385691e21ed 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 SQL 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.3