1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-19 23:22:23 +03:00

Add hint about not qualifying UPDATE...SET target with relation name.

Target columns in UPDATE ... SET must not be qualified with the target
table; we disallow this because it'd create ambiguity about which name
is the column name in case of field-qualified names.  However, newbies
have been seen to expect that they could qualify a target name just
like other names.  The error message when they do is confusing:
"column "foo" of relation "foo" does not exist".  To improve matters,
issue a HINT if the invalid name is qualified and matches the
relation's alias.

James Coleman (editorialized a bit by me)

Discussion: https://postgr.es/m/CAAaqYe8S2Qa060UV-YF5GoSd5PkEhLV94x-fEi3=TOtpaXCV+w@mail.gmail.com
This commit is contained in:
Tom Lane
2024-01-20 17:54:14 -05:00
parent 075df6b208
commit 58447e3189
5 changed files with 21 additions and 0 deletions

View File

@@ -2518,6 +2518,9 @@ transformUpdateTargetList(ParseState *pstate, List *origTlist)
errmsg("column \"%s\" of relation \"%s\" does not exist",
origTarget->name,
RelationGetRelationName(pstate->p_target_relation)),
(origTarget->indirection != NIL &&
strcmp(origTarget->name, pstate->p_target_nsitem->p_names->aliasname) == 0) ?
errhint("SET target columns cannot be qualified with the relation name.") : 0,
parser_errposition(pstate, origTarget->location)));
updateTargetListEntry(pstate, tle, origTarget->name,