Hi,
Since 9.4 FrozenTransactionId is no longer used to freeze row versions. The change was done by commit 37484ad:

> Instead of changing the tuple xmin to FrozenTransactionId, the combination > of HEAP_XMIN_COMMITTED and HEAP_XMIN_INVALID, which were previously never
>     set together, is now defined as HEAP_XMIN_FROZEN.

But we still have FrozenTransactionId mentioned in section 23.1.5.
Please consider the attached patch to fix it.

Thanks,
Egor Rogov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml
index 5204b34..8b966cc 100644
--- a/doc/src/sgml/maintenance.sgml
+++ b/doc/src/sgml/maintenance.sgml
@@ -403,28 +403,22 @@
 
    <para>
     The reason that periodic vacuuming solves the problem is that
-    <command>VACUUM</> will mark rows as <emphasis>frozen</>, indicating that
-    they were inserted by a transaction which committed sufficiently far in
-    the past that the effects of the inserting transaction is certain to be
-    visible, from an MVCC perspective, to all current and future transactions.
-    <productname>PostgreSQL</> reserves a special XID,
-    <literal>FrozenTransactionId</>, which does not follow the normal XID
-    comparison rules and is always considered older
-    than every normal XID. Normal XIDs are
-    compared using modulo-2<superscript>32</> arithmetic. This means
-    that for every normal XID, there are two billion XIDs that are
-    <quote>older</> and two billion that are <quote>newer</>; another
-    way to say it is that the normal XID space is circular with no
-    endpoint. Therefore, once a row version has been created with a particular
-    normal XID, the row version will appear to be <quote>in the past</> for
-    the next two billion transactions, no matter which normal XID we are
-    talking about. If the row version still exists after more than two billion
-    transactions, it will suddenly appear to be in the future. To
-    prevent this, frozen row versions are treated as if the inserting XID were
-    <literal>FrozenTransactionId</>, so that they will appear to be
-    <quote>in the past</> to all normal transactions regardless of wraparound
-    issues, and so such row versions will be valid until deleted, no matter
-    how long that is.
+    <command>VACUUM</> will mark rows as <emphasis>frozen</> (by setting
+    appropriate hint bits), indicating that they were inserted by a transaction
+    which committed sufficiently far in the past that the effects of the
+    inserting transaction is certain to be visible, from an MVCC perspective,
+    to all current and future transactions.  Usually XIDs are compared using
+    modulo-2<superscript>32</> arithmetic. This means that for every XID, there
+    are two billion XIDs that are <quote>older</> and two billion that are
+    <quote>newer</>; another way to say it is that the XID space is circular
+    with no endpoint. Therefore, once a row version has been created with a
+    particular XID, the row version will appear to be <quote>in the past</> for
+    the next two billion transactions. If the row version still exists after
+    more than two billion transactions, it will suddenly appear to be in the
+    future. To prevent this, usual visibility rules are not applied to frozen
+    row versions. Instead they are considered to be <quote>in the past</> to
+    all transactions regardless of wraparound issues, and so such row versions
+    will be valid until deleted, no matter how long that is.
    </para>
 
    <para>
-- 
Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs

Reply via email to