On Sat, Sep 19, 2015 at 5:15 PM, Andres Freund <andres@anarazel.de> wrote:
> postgres[14993][1]=# CREATE TABLE mismatch(a int, b int);
> CREATE TABLE
> postgres[14993][1]=# UPDATE mismatch SET a = mismatch.*;
> ERROR: XX000: UPDATE target count mismatch --- internal error
> LOCATION: transformUpdateTargetList, analyze.c:2103
>
> Seems to be a longer standing thing, going at least back to 9.0.
I noticed this myself.
Arguably, the only problem is that this is reported as an internal
"can't happen" error. We're already tightening up the use of
elog(ERROR, ...) to be strictly limited to cases that are actually
"can't happen" (assuming there are no bugs and no data corruption). We
should do the same here.
I doubt it's worth preserving this message for the benefit of
theoretical buggy code paths that raise it for some other reason.
--
Peter Geoghegan