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: pgsql-hackers@lists.postgresql.org, Michael Paquier <michael@paquier.xyz>
Date: 2019-05-06T07:01:05Z
Lists: pgsql-hackers
On 2019-05-06 00:00:04 -0400, Tom Lane wrote: > Andres Freund <andres@anarazel.de> writes: > > On May 5, 2019 8:56:58 PM PDT, Tom Lane <tgl@sss.pgh.pa.us> wrote: > >> On this coast, "tonight" is running into "tomorrow" ... you planning > >> to do that soon? > > > I'd planned to finish cooking and eating, and then doing it. Seems like that'd be plenty early? > > Sure, dinner can take priority. And pushed. I've not done so for 12. For one, because there's no imminent release, and there's plenty reindexing related changes in 12. But also because I have two vague ideas that might allow us to keep the test in the regular schedule. 1) Is there a way that we could just use the type of logic we use for CREATE INDEX CONCURRENTLY to force waiting for previously started sessions, before doing the REINDEXing of pg_class et al? I think it'd work to just add a CREATE INDEX CONCURRENTLY in a transaction, after taking an exclusive lock on pg_class - but I suspect that'd be just as deadlock prone, just for different reasons? 2) Couldn't we just add a simple loop in plpgsql that checks that the previous session ended? A simple DO loop around SELECT pid FROM pg_stat_activity WHERE datname = current_database() AND pid <> pg_backend_pid(); doesn't sound like it'd be too complicated? That wouldn't work in older releases, because we e.g. wouldn't see autoanalyze anywhere conveniently. I'm afraid there'd still be the issue that an autoanalyze could spin up concurrently? And we can't just prevent that by locking pg_class, because we'd otherwise just have the same deadlock? I for sure thought I earlier had an idea that'd actually work. But either I've lost it, or it didn't actually work. But perhaps somebody else can come up with something based on the above strawman ideas? 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