Re: REINDEX INDEX results in a crash for an index of pg_class since 9.6
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Michael Paquier <michael@paquier.xyz>, Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2019-05-01T17:21:15Z
Lists: pgsql-hackers
Attachments
- cca.diff (text/x-diff) patch
On 2019-05-01 10:06:03 -0700, Andres Freund wrote: > I'm not sure this is the right short-term answer. Why isn't it, for now, > sufficient to do what I suggested with RelationSetNewRelfilenode() not > doing the CommandCounterIncrement(), and reindex_index() then doing the > SetReindexProcessing() before a CommandCounterIncrement()? That's like > ~10 line code change, and a few more with comments. > > There is the danger that the current and above approach basically relies > on there not to be any non-inplace updates during reindex. But at the > moment code does take care to use inplace updates > (cf. index_update_stats()). > > It's not clear to me whether the approach of using > RelationSetIndexList() in reindex_index() would be meaningfully more > robust against non-inplace updates during reindex either - ISTM we'd > just as well skip the necessary index insertions if we hid the index > being rebuilt. Skipping to-be-rebuilt indexes works for > reindex_relation() because they're going to be rebuilt subsequently (and > thus the missing index rows don't matter) - but it'd not work for > reindexing a single index, because it'll not get the result at a later > stage. FWIW, the dirty-hack version (attached) of the CommandCounterIncrement() approach fixes the issue for a REINDEX pg_class_oid_index; in solation even when using CCA. Started a whole CCA testrun with it, but the results of that will obviously not be in quick. Greetings, Andres Freund
Commits
-
Remove reindex_catalog test from test schedules.
- 5997a8f4d747 12.0 landed
- 70200d0d7402 9.4.22 landed
- 8439589bc7e7 9.5.17 landed
- 55eebb80005c 9.6.13 landed
- 443ca97956ee 10.8 landed
- 60c2951e1bab 11.3 landed
-
Remove RelationSetIndexList().
- f884dca4959f 12.0 landed
-
Fix reindexing of pg_class indexes some more.
- 5f8e84ff47ff 9.4.22 landed
- f912d7dec293 12.0 landed
- d18ef690509f 9.5.17 landed
- 727c155cfbfb 11.3 landed
- 2bb1adfacdf1 9.6.13 landed
- 18138066ff36 10.8 landed
-
Run catalog reindexing test from 3dbb317d32 serially, to avoid deadlocks.
- ad791802831e 10.8 landed
- 8e955f212089 9.6.13 landed
- 856bc0c612be 9.4.22 landed
- 809c9b48f4bd 12.0 landed
- 63c6a24ae4d6 11.3 landed
- 3630c6bfad94 9.5.17 landed
-
Fix potential assertion failure when reindexing a pg_class index.
- e7418f89f17a 9.4.22 landed
- 670a492c5f1b 9.5.17 landed
- 17126e0892cb 9.6.13 landed
- f495b65a5659 10.8 landed
- 14323493dd53 11.3 landed
- 3dbb317d32f4 12.0 landed
-
Fix several recently introduced issues around handling new relation forks.
- 5c1560606dc4 12.0 landed
-
Avoid VACUUM FULL altogether in initdb.
- 01e386a32554 9.6.0 cited
-
Introduce replication progress tracking infrastructure.
- 5aa2350426c4 9.5.0 cited
-
initdb: remove unnecessary VACUUM FULL
- ed7b3b3811c5 9.5.0 cited