Thread: Update count mismatch - internal error

Update count mismatch - internal error

From
Andres Freund
Date:
Hi,

While working on polishing remaining upsert issues I found a, afaics
unrelated, issue:

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.

Greetings,

Andres Freund



Re: Update count mismatch - internal error

From
Peter Geoghegan
Date:
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