Commit 1c15aac5 authored by Kevin Grittner's avatar Kevin Grittner

Add comment & docs about no vacuum truncation with sto.

Omission noted by Andres Freund.
parent b11e9bbc
...@@ -2091,6 +2091,15 @@ include_dir 'conf.d' ...@@ -2091,6 +2091,15 @@ include_dir 'conf.d'
transaction ID wraparound may occur in much shorter time frames. transaction ID wraparound may occur in much shorter time frames.
</para> </para>
<para>
When this feature is enabled, freed space at the end of a relation
cannot be released to the operating system, since that could remove
information needed to detect the <literal>snapshot too old</>
condition. All space allocated to a relation remains associated with
that relation for reuse only within that relation unless explicitly
freed (for example, with <command>VACUUM FULL</>).
</para>
<para> <para>
This setting does not attempt to guarantee that an error will be This setting does not attempt to guarantee that an error will be
generated under any particular circumstances. In fact, if the generated under any particular circumstances. In fact, if the
......
...@@ -1663,6 +1663,15 @@ lazy_cleanup_index(Relation indrel, ...@@ -1663,6 +1663,15 @@ lazy_cleanup_index(Relation indrel,
* Don't even think about it unless we have a shot at releasing a goodly * Don't even think about it unless we have a shot at releasing a goodly
* number of pages. Otherwise, the time taken isn't worth it. * number of pages. Otherwise, the time taken isn't worth it.
* *
* Also don't attempt it if we are doing early pruning/vacuuming, because a
* scan which cannot find a truncated heap page cannot determine that the
* snapshot is too old to read that page. We might be able to get away with
* truncating all except one of the pages, setting its LSN to (at least) the
* maximum of the truncated range if we also treated an index leaf tuple
* pointing to a missing heap page as something to trigger the "snapshot too
* old" error, but that seems fragile and seems like it deserves its own patch
* if we consider it.
*
* This is split out so that we can test whether truncation is going to be * This is split out so that we can test whether truncation is going to be
* called for before we actually do it. If you change the logic here, be * called for before we actually do it. If you change the logic here, be
* careful to depend only on fields that lazy_scan_heap updates on-the-fly. * careful to depend only on fields that lazy_scan_heap updates on-the-fly.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment