Add check for syscache lookup failure in update_relispartition().
Omitted in commit 05b38c7e6 (though it looks like the original blame belongs to 9e9befac4). A failure is admittedly unlikely, but if it did happen, SIGSEGV is not the approved method of reporting it. Per Coverity. Back-patch to v11 where the broken code originated.
This commit is contained in:
parent
506af101f3
commit
030ad0acfa
@ -2682,10 +2682,11 @@ update_relispartition(Oid relationId, bool newval)
|
|||||||
|
|
||||||
classRel = heap_open(RelationRelationId, RowExclusiveLock);
|
classRel = heap_open(RelationRelationId, RowExclusiveLock);
|
||||||
tup = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relationId));
|
tup = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relationId));
|
||||||
|
if (!HeapTupleIsValid(tup))
|
||||||
|
elog(ERROR, "cache lookup failed for relation %u", relationId);
|
||||||
Assert(((Form_pg_class) GETSTRUCT(tup))->relispartition != newval);
|
Assert(((Form_pg_class) GETSTRUCT(tup))->relispartition != newval);
|
||||||
((Form_pg_class) GETSTRUCT(tup))->relispartition = newval;
|
((Form_pg_class) GETSTRUCT(tup))->relispartition = newval;
|
||||||
CatalogTupleUpdate(classRel, &tup->t_self, tup);
|
CatalogTupleUpdate(classRel, &tup->t_self, tup);
|
||||||
heap_freetuple(tup);
|
heap_freetuple(tup);
|
||||||
|
|
||||||
heap_close(classRel, RowExclusiveLock);
|
heap_close(classRel, RowExclusiveLock);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user