Re: Upsert error "column reference is ambiguous" - Mailing list pgsql-general

From Laurenz Albe
Subject Re: Upsert error "column reference is ambiguous"
Date
Msg-id c913f8b24f5eab529b45040fecee79eef2339715.camel@cybertec.at
Whole thread Raw
In response to Re: Upsert error "column reference is ambiguous"  (Tim Starling <tstarling@wikimedia.org>)
List pgsql-general
On Mon, 2025-04-28 at 21:22 +1000, Tim Starling wrote:
> On 28/4/25 20:54, Tom Lane wrote:
> > Even if I were on board with arbitrarily adopting one of the two
> > possible interpretations, it's far from obvious to me that most people
> > would agree that "v" should mean the value from the existing row,
> > rather than the new value.  Better to make them say which they want.
>
> OK sure, no way to tell, but if every other DBMS does it the same way
> then that might be a hint.

Which DBMS that supports INSERT .. ON CONFLICT do you have in mind?

> Also, I'm just saying, the upsert feature is fully useless to me with
> this name resolution policy.

Because you cannot write EXCLUDED?

> In the single-row case, there's no need for EXCLUDED at all, because
> the client knows everything about the excluded row. Recall my example:
>
> INSERT INTO t VALUES (1,1) ON CONFLICT (k) DO UPDATE SET v=v+1;
>
> If I meant SET v=EXCLUDED.v+1 I would have just written v=2. The
> default policy (in other DBMSes) follows by analogy from the
> single-row case.

Actually, for many people, the DWIM would be the other way around:

INSERT INTO tab (col)
SELECT something FROM othertab
ON CONFLICT (id)
/* "col" should get set to "something" */
DO UPDATE SET col = col;

I can follow your reasoning above, but if the SQL parser tried to
guess the user's intention like that, it is likely to go wrong
sometimes.  As Tom said, better force the user to be explicit.

Yours,
Laurenz Albe



pgsql-general by date:

Previous
From: Tim Starling
Date:
Subject: Re: Upsert error "column reference is ambiguous"
Next
From: Peter Geoghegan
Date:
Subject: Re: Upsert error "column reference is ambiguous"