Skip foreign tablespaces when running pg_checksums/pg_verify_checksums
authorMichael Paquier <michael@paquier.xyz>
Thu, 27 Feb 2020 06:31:27 +0000 (15:31 +0900)
committerMichael Paquier <michael@paquier.xyz>
Thu, 27 Feb 2020 06:31:27 +0000 (15:31 +0900)
commit428a2609ef64b69d709418a50e192ff11a2643f1
tree6c6c218647be0df3bc2d06dea42ae2cb710ca0a0
parent05d8449e73694585b59f8b03aaa087f04cc4679a
Skip foreign tablespaces when running pg_checksums/pg_verify_checksums

Attempting to use pg_checksums (pg_verify_checksums in 11) on a data
folder which includes tablespace paths used across multiple major
versions would cause pg_checksums to scan all directories present in
pg_tblspc, and not only marked with TABLESPACE_VERSION_DIRECTORY.  This
could lead to failures when for example running sanity checks on an
upgraded instance with --check.  Even worse, it was possible to rewrite
on-disk pages with --enable for a cluster potentially online.

This commit makes pg_checksums skip any directories not named
TABLESPACE_VERSION_DIRECTORY, similarly to what is done for base
backups.

Reported-by: Michael Banck
Author: Michael Banck, Bernd Helmle
Discussion: https://postgr.es/m/62031974fd8e941dd8351fbc8c7eff60d59c5338.camel@credativ.de
backpatch-through: 11
src/bin/pg_checksums/pg_checksums.c
src/bin/pg_checksums/t/002_actions.pl