diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c
index 86cc640cf267c81f947fc9db4c0cc129e0a021c9..9c11b09cbcc57be8100b4beb3876032659aa52c2 100644
--- a/src/backend/optimizer/util/plancat.c
+++ b/src/backend/optimizer/util/plancat.c
@@ -408,17 +408,20 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
 
 	foreach(l, fkoidlist)
 	{
-		int			i;
-		ArrayType  *arr;
+		Oid			fkoid = lfirst_oid(l);
+		HeapTuple	htup;
+		Form_pg_constraint constraint;
+		ForeignKeyOptInfo *info;
 		Datum		adatum;
 		bool		isnull;
+		ArrayType  *arr;
 		int			numkeys;
-		Oid			fkoid = lfirst_oid(l);
-
-		HeapTuple	htup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(fkoid));
-		Form_pg_constraint constraint = (Form_pg_constraint) GETSTRUCT(htup);
+		int			i;
 
-		ForeignKeyOptInfo *info;
+		htup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(fkoid));
+		if (!HeapTupleIsValid(htup)) /* should not happen */
+			elog(ERROR, "cache lookup failed for constraint %u", fkoid);
+		constraint = (Form_pg_constraint) GETSTRUCT(htup);
 
 		Assert(constraint->contype == CONSTRAINT_FOREIGN);
 
@@ -434,8 +437,7 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
 
 		arr = DatumGetArrayTypeP(adatum);
 		numkeys = ARR_DIMS(arr)[0];
-		info->conkeys = (int*)palloc0(numkeys * sizeof(int));
-
+		info->conkeys = (int*)palloc(numkeys * sizeof(int));
 		for (i = 0; i < numkeys; i++)
 			info->conkeys[i] = ((int16 *) ARR_DATA_PTR(arr))[i];
 
@@ -445,9 +447,8 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
 		Assert(!isnull);
 
 		arr = DatumGetArrayTypeP(adatum);
-		numkeys = ARR_DIMS(arr)[0];
-		info->confkeys = (int*)palloc0(numkeys * sizeof(int));
-
+		Assert(numkeys == ARR_DIMS(arr)[0]);
+		info->confkeys = (int*)palloc(numkeys * sizeof(int));
 		for (i = 0; i < numkeys; i++)
 			info->confkeys[i] = ((int16 *) ARR_DATA_PTR(arr))[i];
 
@@ -457,9 +458,8 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
 		Assert(!isnull);
 
 		arr = DatumGetArrayTypeP(adatum);
-		numkeys = ARR_DIMS(arr)[0];
-		info->conpfeqop = (Oid*)palloc0(numkeys * sizeof(Oid));
-
+		Assert(numkeys == ARR_DIMS(arr)[0]);
+		info->conpfeqop = (Oid*)palloc(numkeys * sizeof(Oid));
 		for (i = 0; i < numkeys; i++)
 			info->conpfeqop[i] = ((Oid *) ARR_DATA_PTR(arr))[i];
 
@@ -467,7 +467,7 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
 
 		ReleaseSysCache(htup);
 
-		fkinfos = lcons(info, fkinfos);
+		fkinfos = lappend(fkinfos, info);
 	}
 
 	list_free(fkoidlist);