summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas2024-03-21 16:54:58 +0000
committerRobert Haas2024-03-21 16:54:58 +0000
commit57184c3b5d89763c882a15adfcdb00990a09d382 (patch)
tree190b9defc80bd6e0ee772d2cfc1648457b4c89e6
parent84d80663199b98db32625b80b039a07487a11b47 (diff)
docs: Make claims about the benefits of HOT updates more precise.
The old text claims that HOT completely removes old row versions. It was unclear whether it just meant the tuples themselves, or the tuples together with their line pointers. If it meant the former, it was wrong because we can remove dead row versions even when no HOT updates have occurred, so it's not describing a benefit of HOT. If it meant the latter, it was wrong because HOT doesn't allow reclaiming the root tuple's line pointer. This section does seems like it's intended to be more of an informal introduction to HOT than a precise technical description of every detail of how it works, but we still don't want it to say things that are just not true, so update the text enough to avoid that. Patch by me, reviewed by James Coleman (although he would have preferred more extensive changes) and Shubham Khanna. Discussion: http://postgr.es/m/CA+TgmobH6DPmR-u--Xgeg8cYUwhDhypNsv38nDrAJyf_xno=TQ@mail.gmail.com
-rw-r--r--doc/src/sgml/storage.sgml16
1 files changed, 11 insertions, 5 deletions
diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml
index 2e1914b95b1..61250799ec0 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -1122,11 +1122,17 @@ data. Empty in ordinary tables.</entry>
</listitem>
<listitem>
<para>
- Old versions of updated rows can be completely removed during normal
- operation, including <command>SELECT</command>s, instead of requiring
- periodic vacuum operations. (This is possible because indexes
- do not reference their <link linkend="storage-page-layout">page
- item identifiers</link>.)
+ When a row is updated multiple times, row versions other than the oldest
+ and the newest can be completely removed during normal operation,
+ including <command>SELECT</command>s, instead of requiring periodic vacuum
+ operations. (Indexes always refer to the
+ <link linkend="storage-page-layout">page item identifier</link> of the
+ original row version. The tuple data associated with that row version
+ is removed, and its item identifier is converted to a redirect that
+ points to the oldest version that may still be visible to some concurrent
+ transaction. Intermediate row versions that are no longer visible to
+ anyone are completely removed, and the associated page item identifiers
+ are made available for reuse.)
</para>
</listitem>
</itemizedlist>