Reject non-ON-SELECT rules that are named "_RETURN".
DefineQueryRewrite() has long required that ON SELECT rules be named "_RETURN". But we overlooked the converse case: we should forbid non-ON-SELECT rules that are named "_RETURN". In particular this prevents using CREATE OR REPLACE RULE to overwrite a view's _RETURN rule with some other kind of rule, thereby breaking the view. Per bug #17646 from Kui Liu. Back-patch to all supported branches. Discussion: https://postgr.es/m/17646-70c93cfa40365776@postgresql.org
This commit is contained in:
parent
eec3466118
commit
797e313dc9
@ -530,6 +530,18 @@ DefineQueryRewrite(const char *rulename,
|
|||||||
RelationGetDescr(event_relation),
|
RelationGetDescr(event_relation),
|
||||||
false, false);
|
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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user