drop-index-concurrently-predicate-locks-v1.patch
text/x-patch
Filename: drop-index-concurrently-predicate-locks-v1.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/catalog/index.c | 9 | 0 |
*** a/src/backend/catalog/index.c --- b/src/backend/catalog/index.c *************** *** 1316,1321 **** index_drop(Oid indexId, bool concurrent) --- 1316,1326 ---- * table lock strong enough to prevent all queries on the table from * proceeding until we commit and send out a shared-cache-inval notice * that will make them update their index lists. + * + * All predicate locks on the index are about to be made invalid. Promote + * them to relation locks on the heap. For correctness this must be done + * after the index was last seen with indisready = true and before it is + * seen with indisvalid = false. */ heapId = IndexGetRelation(indexId, false); if (concurrent) *************** *** 1349,1354 **** index_drop(Oid indexId, bool concurrent) --- 1354,1361 ---- */ indexRelation = heap_open(IndexRelationId, RowExclusiveLock); + TransferPredicateLocksToHeapRelation(userIndexRelation); + tuple = SearchSysCacheCopy1(INDEXRELID, ObjectIdGetDatum(indexId)); if (!HeapTupleIsValid(tuple)) *************** *** 1438,1449 **** index_drop(Oid indexId, bool concurrent) userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock); userIndexRelation = index_open(indexId, AccessExclusiveLock); } ! ! /* ! * All predicate locks on the index are about to be made invalid. Promote ! * them to relation locks on the heap. ! */ ! TransferPredicateLocksToHeapRelation(userIndexRelation); /* * Schedule physical removal of the files --- 1445,1452 ---- userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock); userIndexRelation = index_open(indexId, AccessExclusiveLock); } ! else ! TransferPredicateLocksToHeapRelation(userIndexRelation); /* * Schedule physical removal of the files