diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 213eabfbb9..09165b269b 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -530,6 +530,18 @@ DefineQueryRewrite(const char *rulename, RelationGetDescr(event_relation), false, false); } + + /* + * And finally, if it's not an ON SELECT rule then it must *not* be + * named _RETURN. This prevents accidentally or maliciously replacing + * a view's ON SELECT rule with some other kind of rule. + */ + if (strcmp(rulename, ViewSelectRuleName) == 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("non-view rule for \"%s\" must not be named \"%s\"", + RelationGetRelationName(event_relation), + ViewSelectRuleName))); } /*