diff options
author | Andres Freund <andres@anarazel.de> | 2020-10-28 21:48:38 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2020-10-28 21:49:07 -0700 |
commit | 1c7675a7a4265064a2c8e1ed02b2c042c2521664 (patch) | |
tree | 64d1a1a0cfeaabeeae54ac49eb279e63e7c6a32d /src/backend/access/gist | |
parent | 8e90ec5580d5345fef31005d7cc2215ba2125070 (diff) | |
download | postgresql-1c7675a7a4265064a2c8e1ed02b2c042c2521664.tar.gz postgresql-1c7675a7a4265064a2c8e1ed02b2c042c2521664.zip |
Fix wrong data table horizon computation during backend startup.
When ComputeXidHorizons() was called before MyDatabaseOid is set,
e.g. because a dead row in a shared relation is encountered during
InitPostgres(), the horizon for normal tables was computed too
aggressively, ignoring all backends connected to a database.
During subsequent pruning in a data table the too aggressive horizon
could end up still being used, possibly leading to still needed tuples
being removed. Not good.
This is a bug in dc7420c2c92, which the test added in 94bc27b5768 made
visible, if run with force_parallel_mode set to regress. In that case
the bug is reliably triggered, because "pruning_query" is run in a
parallel worker and the start of that parallel worker is likely to
encounter a dead row in pg_database.
The fix is trivial: Compute a more pessimistic data table horizon if
MyDatabaseId is not yet known.
Author: Andres Freund
Discussion: https://postgr.es/m/20201029040030.p4osrmaywhqaesd4@alap3.anarazel.de
Diffstat (limited to 'src/backend/access/gist')
0 files changed, 0 insertions, 0 deletions