1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

pg_amcheck: avoid unhelpful verification attempts.

Avoid calling contrib/amcheck functions with relations that are
unsuitable for checking.  Specifically, don't attempt verification of
temporary relations, or indexes whose pg_index entry indicates that the
index is invalid, or not ready.

These relations are not supported by any of the contrib/amcheck
functions, for reasons that are pretty fundamental.  For example, the
implementation of REINDEX CONCURRENTLY can add its own "transient"
pg_index entries, which has rather unclear implications for the B-Tree
verification functions, at least in the general case -- so they just
treat it as an error.  It falls to the amcheck caller (in this case
pg_amcheck) to deal with the situation at a higher level.

pg_amcheck now simply treats these conditions as additional "visibility
concerns" when it queries system catalogs.  This is a little arbitrary.
It seems to have the least problems among any of the available
alternatives.

Author: Mark Dilger <mark.dilger@enterprisedb.com>
Reported-By: Alexander Lakhin <exclusion@gmail.com>
Reviewed-By: Peter Geoghegan <pg@bowt.ie>
Reviewed-By: Robert Haas <robertmhaas@gmail.com>
Bug: #17212
Discussion: https://postgr.es/m/17212-34dd4a1d6bba98bf@postgresql.org
Backpatch: 14-, where pg_amcheck was introduced.
This commit is contained in:
Peter Geoghegan
2021-10-13 14:08:11 -07:00
parent 419d27b1a2
commit dd58194cf5
3 changed files with 299 additions and 29 deletions

View File

@ -432,6 +432,18 @@ PostgreSQL documentation
</variablelist>
</para>
<warning>
<para>
The extra checks performed against B-tree indexes when the
<option>--parent-check</option> option or the
<option>--rootdescend</option> option is specified require
relatively strong relation-level locks. These checks are the only
checks that will block concurrent data modification from
<command>INSERT</command>, <command>UPDATE</command>, and
<command>DELETE</command> commands.
</para>
</warning>
<para>
The following command-line options control the connection to the server: