diff options
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/adt/ri_triggers.c | 2 | ||||
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 5ef1563d1c9..591d2eb16b0 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -2651,11 +2651,13 @@ RI_Initial_Check(Trigger *trigger, Relation fk_rel, Relation pk_rel) pkrte = makeNode(RangeTblEntry); pkrte->rtekind = RTE_RELATION; pkrte->relid = RelationGetRelid(pk_rel); + pkrte->relkind = pk_rel->rd_rel->relkind; pkrte->requiredPerms = ACL_SELECT; fkrte = makeNode(RangeTblEntry); fkrte->rtekind = RTE_RELATION; fkrte->relid = RelationGetRelid(fk_rel); + fkrte->relkind = fk_rel->rd_rel->relkind; fkrte->requiredPerms = ACL_SELECT; for (i = 0; i < riinfo.nkeys; i++) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index cd64235438e..d9b359465a2 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -628,6 +628,7 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty) if (!isnull) { Node *qual; + char relkind; deparse_context context; deparse_namespace dpns; RangeTblEntry *oldrte; @@ -637,10 +638,13 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty) qual = stringToNode(TextDatumGetCString(value)); + relkind = get_rel_relkind(trigrec->tgrelid); + /* Build minimal OLD and NEW RTEs for the rel */ oldrte = makeNode(RangeTblEntry); oldrte->rtekind = RTE_RELATION; oldrte->relid = trigrec->tgrelid; + oldrte->relkind = relkind; oldrte->eref = makeAlias("old", NIL); oldrte->inh = false; oldrte->inFromCl = true; @@ -648,6 +652,7 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty) newrte = makeNode(RangeTblEntry); newrte->rtekind = RTE_RELATION; newrte->relid = trigrec->tgrelid; + newrte->relkind = relkind; newrte->eref = makeAlias("new", NIL); newrte->inh = false; newrte->inFromCl = true; @@ -2125,6 +2130,7 @@ deparse_context_for(const char *aliasname, Oid relid) rte = makeNode(RangeTblEntry); rte->rtekind = RTE_RELATION; rte->relid = relid; + rte->relkind = RELKIND_RELATION; /* no need for exactness here */ rte->eref = makeAlias(aliasname, NIL); rte->inh = false; rte->inFromCl = true; @@ -4004,7 +4010,6 @@ get_name_for_var_field(Var *var, int fieldno, switch (rte->rtekind) { case RTE_RELATION: - case RTE_SPECIAL: case RTE_VALUES: /* |