Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit55965eb

Browse files
committed
Improve error message for rejecting RETURNING clauses with dropped columns.
This error message was written with only ON SELECT rules in mind, but sincethen we also made RETURNING-clause targetlists go through the same logic.This means that you got a rather off-topic error message if you tried toadd a rule with RETURNING to a table having dropped columns. Ideally we'djust support that, but some preliminary investigation says that it might bea significant amount of work. Seeing that Nicklas Avén's complaint is thefirst one we've gotten about this in the ten years or so that the code'sbeen like that, I'm unwilling to put much time into it. Instead, improvethe error report by issuing a different message for RETURNING cases, andrevise the associated comment based on this investigation.Discussion: 1456176604.17219.9.camel@jordogskog.no
1 parent0bd51de commit55965eb

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

‎src/backend/rewrite/rewriteDefine.c

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -654,17 +654,29 @@ checkRuleResultList(List *targetList, TupleDesc resultDesc, bool isSelect,
654654
attname=NameStr(attr->attname);
655655

656656
/*
657-
* Disallow dropped columns in the relation. This won't happen in the
658-
* cases we actually care about (namely creating a view via CREATE
659-
* TABLE then CREATE RULE, or adding a RETURNING rule to a view).
660-
* Trying to cope with it is much more trouble than it's worth,
661-
* because we'd have to modify the rule to insert dummy NULLs at the
662-
* right positions.
657+
* Disallow dropped columns in the relation. This is not really
658+
* expected to happen when creating an ON SELECT rule. It'd be
659+
* possible if someone tried to convert a relation with dropped
660+
* columns to a view, but the only case we care about supporting
661+
* table-to-view conversion for is pg_dump, and pg_dump won't do that.
662+
*
663+
* Unfortunately, the situation is also possible when adding a rule
664+
* with RETURNING to a regular table, and rejecting that case is
665+
* altogether more annoying. In principle we could support it by
666+
* modifying the targetlist to include dummy NULL columns
667+
* corresponding to the dropped columns in the tupdesc. However,
668+
* places like ruleutils.c would have to be fixed to not process such
669+
* entries, and that would take an uncertain and possibly rather large
670+
* amount of work. (Note we could not dodge that by marking the dummy
671+
* columns resjunk, since it's precisely the non-resjunk tlist columns
672+
* that are expected to correspond to table columns.)
663673
*/
664674
if (attr->attisdropped)
665675
ereport(ERROR,
666676
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
667-
errmsg("cannot convert relation containing dropped columns to view")));
677+
isSelect ?
678+
errmsg("cannot convert relation containing dropped columns to view") :
679+
errmsg("cannot create a RETURNING list for a relation containing dropped columns")));
668680

669681
/* Check name match if required; no need for two error texts here */
670682
if (requireColumnNameMatch&&strcmp(tle->resname,attname)!=0)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp