mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
The original titles only had the module name, which is not very useful when scanning the list. By adding a very brief description to each title, the table of contents becomes friendlier. Also amend the introduction in the "additional modules" appendix, using the word "Extension" more extensively. Nowadays, almost all contrib modules are extensions, so this is also helpful. Author: Karl O. Pinc <kop@karlpinc.com> Reviewed-by: Brar Piening <brar@gmx.de> Discussion: https://postgr.es/m/20230102180015.372995a9@slate.karlpinc.com
159 lines
5.9 KiB
Plaintext
159 lines
5.9 KiB
Plaintext
<!-- doc/src/sgml/pgvisibility.sgml -->
|
|
|
|
<sect1 id="pgvisibility" xreflabel="pg_visibility">
|
|
<title>pg_visibility — visibility map information and utilities</title>
|
|
|
|
<indexterm zone="pgvisibility">
|
|
<primary>pg_visibility</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
The <filename>pg_visibility</filename> module provides a means for examining the
|
|
visibility map (VM) and page-level visibility information of a table.
|
|
It also provides functions to check the integrity of a visibility map and to
|
|
force it to be rebuilt.
|
|
</para>
|
|
|
|
<para>
|
|
Three different bits are used to store information about page-level
|
|
visibility. The all-visible bit in the visibility map indicates that every
|
|
tuple in the corresponding page of the relation is visible to every current
|
|
and future transaction. The all-frozen bit in the visibility map indicates
|
|
that every tuple in the page is frozen; that is, no future vacuum will need
|
|
to modify the page until such time as a tuple is inserted, updated, deleted,
|
|
or locked on that page.
|
|
The page header's <literal>PD_ALL_VISIBLE</literal> bit has the
|
|
same meaning as the all-visible bit in the visibility map, but is stored
|
|
within the data page itself rather than in a separate data structure.
|
|
These two bits will normally agree, but the page's all-visible bit can
|
|
sometimes be set while the visibility map bit is clear after a crash
|
|
recovery. The reported values can also disagree because of a change that
|
|
occurs after <literal>pg_visibility</literal> examines the visibility map and
|
|
before it examines the data page. Any event that causes data corruption
|
|
can also cause these bits to disagree.
|
|
</para>
|
|
|
|
<para>
|
|
Functions that display information about <literal>PD_ALL_VISIBLE</literal> bits
|
|
are much more costly than those that only consult the visibility map,
|
|
because they must read the relation's data blocks rather than only the
|
|
(much smaller) visibility map. Functions that check the relation's
|
|
data blocks are similarly expensive.
|
|
</para>
|
|
|
|
<sect2 id="pgvisibility-funcs">
|
|
<title>Functions</title>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><function>pg_visibility_map(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) returns record</function></term>
|
|
<listitem>
|
|
<para>
|
|
Returns the all-visible and all-frozen bits in the visibility map for
|
|
the given block of the given relation.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_visibility(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns record</function></term>
|
|
<listitem>
|
|
<para>
|
|
Returns the all-visible and all-frozen bits in the visibility map for
|
|
the given block of the given relation, plus the
|
|
<literal>PD_ALL_VISIBLE</literal> bit of that block.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_visibility_map(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) returns setof record</function></term>
|
|
<listitem>
|
|
<para>
|
|
Returns the all-visible and all-frozen bits in the visibility map for
|
|
each block of the given relation.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_visibility(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns setof record</function></term>
|
|
|
|
<listitem>
|
|
<para>
|
|
Returns the all-visible and all-frozen bits in the visibility map for
|
|
each block of the given relation, plus the <literal>PD_ALL_VISIBLE</literal>
|
|
bit of each block.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_visibility_map_summary(relation regclass, all_visible OUT bigint, all_frozen OUT bigint) returns record</function></term>
|
|
|
|
<listitem>
|
|
<para>
|
|
Returns the number of all-visible pages and the number of all-frozen
|
|
pages in the relation according to the visibility map.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_check_frozen(relation regclass, t_ctid OUT tid) returns setof tid</function></term>
|
|
|
|
<listitem>
|
|
<para>
|
|
Returns the TIDs of non-frozen tuples stored in pages marked all-frozen
|
|
in the visibility map. If this function returns a non-empty set of
|
|
TIDs, the visibility map is corrupt.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_check_visible(relation regclass, t_ctid OUT tid) returns setof tid</function></term>
|
|
|
|
<listitem>
|
|
<para>
|
|
Returns the TIDs of non-all-visible tuples stored in pages marked
|
|
all-visible in the visibility map. If this function returns a non-empty
|
|
set of TIDs, the visibility map is corrupt.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><function>pg_truncate_visibility_map(relation regclass) returns void</function></term>
|
|
|
|
<listitem>
|
|
<para>
|
|
Truncates the visibility map for the given relation. This function is
|
|
useful if you believe that the visibility map for the relation is
|
|
corrupt and wish to force rebuilding it. The first <command>VACUUM</command>
|
|
executed on the given relation after this function is executed will scan
|
|
every page in the relation and rebuild the visibility map. (Until that
|
|
is done, queries will treat the visibility map as containing all zeroes.)
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>
|
|
By default, these functions are executable only by superusers and roles with privileges
|
|
of the <literal>pg_stat_scan_tables</literal> role, with the exception of
|
|
<function>pg_truncate_visibility_map(relation regclass)</function> which can only
|
|
be executed by superusers.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="pgvisibility-author">
|
|
<title>Author</title>
|
|
|
|
<para>
|
|
Robert Haas <email>rhaas@postgresql.org</email>
|
|
</para>
|
|
</sect2>
|
|
|
|
</sect1>
|