Skip to content

Commit 797e313

Browse files
committed
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
1 parent eec3466 commit 797e313

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/backend/rewrite/rewriteDefine.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,18 @@ DefineQueryRewrite(const char *rulename,
530530
RelationGetDescr(event_relation),
531531
false, false);
532532
}
533+
534+
/*
535+
* And finally, if it's not an ON SELECT rule then it must *not* be
536+
* named _RETURN. This prevents accidentally or maliciously replacing
537+
* a view's ON SELECT rule with some other kind of rule.
538+
*/
539+
if (strcmp(rulename, ViewSelectRuleName) == 0)
540+
ereport(ERROR,
541+
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
542+
errmsg("non-view rule for \"%s\" must not be named \"%s\"",
543+
RelationGetRelationName(event_relation),
544+
ViewSelectRuleName)));
533545
}
534546

535547
/*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy