Hi, > This issue has been reported in the <pgsql-bugs> list at the link below, but > has not received a reply. > https://www.postgresql.org/message-id/18286-f6273332500c2a62%40postgresql.org > Hopefully to get some response from kernel hackers, thanks! > > Hi, > When reindex the partitioned table's index and the drop index are executed > concurrently, we may encounter the error "could not open relation with OID”. > > The reconstruction of the partitioned table's index is completed in multiple > transactions and can be simply summarized into the following steps: > 1. Obtain the oids of all partition indexes in the ReindexPartitions > function, and then commit the transaction to release all locks. > 2. Reindex each index in turn > 2.1 Start a new transaction > 2.2 Check whether the index still exists > 2.3 Call the reindex_index function to complete the index rebuilding work > 2.4 Submit transaction > > There is no lock between steps 2.2 and 2.3 to protect the heap table and > index from being deleted, so whether the heap table still exists is > determined in the reindex_index function, but the index is not checked. > > One fix I can think of is: after successfully opening the heap table in > reindex_index, check again whether the index still exists, Something like > this: > diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c > index 143fae01eb..21777ec98c 100644 > --- a/src/backend/catalog/index.c > +++ b/src/backend/catalog/index.c > @@ -3594,6 +3594,17 @@ reindex_index(Oid indexId, bool > skip_constraint_checks, char persistence, > if (!heapRelation) > return; > > + /* > + * Before opening the index, check if the index relation still exists. > + * If index relation is gone, leave. > + */ > + if (params->options & REINDEXOPT_MISSING_OK != 0 && > + !SearchSysCacheExists1(RELOID, ObjectIdGetDatum(indexId))) > + { > + table_close(heapRelation, NoLock); > + return; > + } > + > /* > * Switch to the table owner's userid, so that any index functions > are run > * as that user. Also lock down security-restricted operations and > > The above analysis is based on the latest master branch. > > I'm not sure if my idea is reasonable, I hope you can give me some > suggestions. Thanks.
Any chance you could provide minimal steps to reproduce the issue on an empty PG instance, ideally as a script? That's going to be helpful to reproduce / investigate the issue and also make sure that it's fixed. -- Best regards, Aleksander Alekseev