diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index b99b9930d6a836903a3513b95fd487a322d8c589..8abf5e438c10139e19f83830a16073f9dd2b812f 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -1605,20 +1605,20 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown) rel = heap_open(rte->relid, NoLock); /* - * Skip materialized view expansion when it is being created. + * Ignore RIR rules for a materialized view, if it is scannable. * - * NOTE: This is assuming that we cannot have gotten to this point - * with a non-scannable materialized view unless it is being - * populated, and that if it is scannable we want to use the existing - * contents. It would be nice to have some way to confirm that we're - * doing the right thing here, but rule expansion doesn't give us a - * lot to work with, so we are trusting earlier validations and - * execution steps to get it right. + * NOTE: This is assuming that if an MV is scannable then we always + * want to use the existing contents, and if it is not scannable we + * cannot have gotten to this point unless it is being populated + * (otherwise an error should be thrown). It would be nice to have + * some way to confirm that we're doing the right thing here, but rule + * expansion doesn't give us a lot to work with, so we are trusting + * earlier validations to throw error if needed. */ if (rel->rd_rel->relkind == RELKIND_MATVIEW && rel->rd_isscannable) { heap_close(rel, NoLock); - break; + continue; } /*