On Mon, Nov 27, 2017 at 07:21:32PM +0900, Amit Langote wrote:
> On 2017/11/27 18:13, bianpan2016@163.com wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference: 14928
> > Logged by: Pan Bian
> > Email address: bianpan2016@163.com
> > PostgreSQL version: 10.1
> > Operating system: Linux
> > Description:
> >
>
> Thanks for the report. Attached a patch that adds a check that tuple is
> valid before trying to dereference it.
>
> Thanks,
> Amit
>
Got it.
Thanks a lot,
Pan Bian
> diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
> index d19846d005..8cd6c65111 100644
> --- a/src/backend/commands/tablecmds.c
> +++ b/src/backend/commands/tablecmds.c
> @@ -14111,6 +14111,9 @@ ATExecDetachPartition(Relation rel, RangeVar *name)
> classRel = heap_open(RelationRelationId, RowExclusiveLock);
> tuple = SearchSysCacheCopy1(RELOID,
> ObjectIdGetDatum(RelationGetRelid(partRel)));
> + if (!HeapTupleIsValid(tuple))
> + elog(ERROR, "cache lookup failed for relation %u",
> + RelationGetRelid(partRel));
> Assert(((Form_pg_class) GETSTRUCT(tuple))->relispartition);
>
> (void) SysCacheGetAttr(RELOID, tuple, Anum_pg_class_relpartbound,