diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index fcb18732d85..4c9d8d9cbd5 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -3944,13 +3944,13 @@ quals_match_foreign_key(PlannerInfo *root, ForeignKeyOptInfo *fkinfo, if (i > 0 && bms_is_member(quallstidx, qualmatches)) continue; - /* - * Here since 'usefulquals' only contains bitmap indexes for quals - * of type "var op var" we can safely skip checking this. - */ rinfo = (RestrictInfo *) lfirst(lc); clause = (OpExpr *) rinfo->clause; + /* only OpExprs are useful for consideration */ + if (!IsA(clause, OpExpr)) + continue; + /* * If the operator does not match then there's little point in * checking the operands.