From 30b46975b8060eddade85f0829e727d4a35e694e Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Wed, 8 Sep 2021 14:03:17 +0300 Subject: [PATCH] Not read heaptuple after closing pg_rewrite (#5255) (cherry picked from commit cc49e632222845cfa1d785c40fabe05497d53255) --- src/backend/distributed/metadata/dependency.c | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/backend/distributed/metadata/dependency.c b/src/backend/distributed/metadata/dependency.c index b3fbd2364..ee8929d4f 100644 --- a/src/backend/distributed/metadata/dependency.c +++ b/src/backend/distributed/metadata/dependency.c @@ -1204,18 +1204,31 @@ GetDependingView(Form_pg_depend pg_depend) true, NULL, 1, rkey); HeapTuple rewriteTup = systable_getnext(rscan); + if (!HeapTupleIsValid(rewriteTup)) + { + /* + * This function already verified that objid's classid is + * RewriteRelationId, so it should exists. But be on the + * safe side. + */ + ereport(ERROR, (errmsg("catalog lookup failed for view %u", + pg_depend->objid))); + } + Form_pg_rewrite pg_rewrite = (Form_pg_rewrite) GETSTRUCT(rewriteTup); bool isView = get_rel_relkind(pg_rewrite->ev_class) == RELKIND_VIEW; bool isMatView = get_rel_relkind(pg_rewrite->ev_class) == RELKIND_MATVIEW; bool isDifferentThanRef = pg_rewrite->ev_class != pg_depend->refobjid; + Oid dependingView = InvalidOid; + if ((isView || isMatView) && isDifferentThanRef) + { + dependingView = pg_rewrite->ev_class; + } + systable_endscan(rscan); relation_close(rewriteRel, AccessShareLock); - if ((isView || isMatView) && isDifferentThanRef) - { - return pg_rewrite->ev_class; - } - return InvalidOid; + return dependingView; }