@@ -535,6 +535,20 @@ ERROR: could not serialize access due to concurrent update
535
535
of explicit locks to block conflicting transactions.
536
536
</para>
537
537
538
+ <para>
539
+ The Repeatable Read isolation level is implemented using a technique
540
+ known in academic database literature and in some other database products
541
+ as <firstterm>Snapshot Isolation</firstterm>. Differences in behavior
542
+ and performance may be observed when compared with systems that use a
543
+ traditional locking technique that reduces concurrency. Some other
544
+ systems may even offer Repeatable Read and Snapshot Isolation as distinct
545
+ isolation levels with different behavior. The permitted phenomena that
546
+ distinguish the two techniques were not formalized by database researchers
547
+ until after the SQL standard was developed, and are outside the scope of
548
+ this manual. For a full treatment, please see
549
+ <xref linkend="berenson95"/>.
550
+ </para>
551
+
538
552
<note>
539
553
<para>
540
554
Prior to <productname>PostgreSQL</productname> version 9.1, a request
@@ -783,6 +797,15 @@ ERROR: could not serialize access due to read/write dependencies among transact
783
797
</listitem>
784
798
</itemizedlist>
785
799
</para>
800
+
801
+ <para>
802
+ The Serializable isolation level is implemented using a technique known
803
+ in academic database literature as Serializable Snapshot Isolation, which
804
+ builds on Snapshot Isolation by adding checks for serialization anomalies.
805
+ Some differences in behavior and performance may be observed when compared
806
+ with other systems that use a traditional locking technique. Please see
807
+ <xref linkend="ports12"/> for detailed information.
808
+ </para>
786
809
</sect2>
787
810
</sect1>
788
811
@@ -1726,6 +1749,16 @@ SELECT pg_advisory_lock(q.id) FROM
1726
1749
see a transient state that is inconsistent with any serial execution
1727
1750
of the transactions on the master.
1728
1751
</para>
1752
+
1753
+ <para>
1754
+ Internal access to the system catalogs is not done using the isolation
1755
+ level of the current transaction. This means that newly created database
1756
+ objects such as tables are visible to concurrent Repeatable Read and
1757
+ Serializable transactions, even though the rows they contain are not. In
1758
+ contrast, queries that explicitly examine the system catalogs don't see
1759
+ rows representing concurrently created database objects, in the higher
1760
+ isolation levels.
1761
+ </para>
1729
1762
</sect1>
1730
1763
1731
1764
<sect1 id="locking-indexes">
0 commit comments