Re: Supporting multiple column assignment in UPDATE (9.5 project)

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Merlin Moncure <mmoncure(at)gmail(dot)com>
Cc: Marko Tiikkaja <marko(at)joh(dot)to>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Supporting multiple column assignment in UPDATE (9.5 project)
Date: 2014-05-05 15:20:06
Message-ID: CAFj8pRB+zw96YvGMbvBoCLbxZNRdgqsg4rwxv9ZVYOxeDBz05Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

2014-05-05 17:02 GMT+02:00 Merlin Moncure <mmoncure(at)gmail(dot)com>:

> On Sat, May 3, 2014 at 5:48 AM, Marko Tiikkaja <marko(at)joh(dot)to> wrote:
> > On 5/2/14, 10:10 PM, Merlin Moncure wrote:
> >>
> >> On Fri, May 2, 2014 at 3:03 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> >>>
> >>> Meh. Then you could have a query that works fine until you add a
> column
> >>> to the table, and it stops working. If nobody ever used column names
> >>> identical to table names it'd be all right, but unfortunately people
> >>> seem to do that a lot...
> >>
> >>
> >> That's already the case with select statements
> >
> > I don't think that's true if you table-qualify your column references and
> > don't use SELECT *.
> >
> >
> >> and, if a user were
> >> concerned about that, always have the option of aliasing the table as
> >> nearly 100% of professional developers do:
> >>
> >> SELECT f FROM foo f;
> >> etc.
> >
> >
> > So e.g.:
> >
> > UPDATE foo f SET f = ..;
> >
> > would resolve to the table, despite there being a column called "f"? That
> > would break backwards compatibility.
> >
> > How about:
> >
> > UPDATE foo SET ROW(foo) = (1,2,3);
> >
> > ISTM that this could be parsed unambiguously, though it's perhaps a bit
> > ugly.
>
> Hm, that's a bit too ugly: row(foo) in this case means 'do special
> behavior X' whereas in all other cases it means make an anonymous
> rowtype with one attribute of type 'foo'.
>
> How about:
> UPDATE foo SET (foo).* = (1,2,3);
>

It is looking little bit strange

I like previous proposal UPDATE foo SET foo = (1,2,3);

Pavel

>
> merlin
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2014-05-05 15:28:21 Re: 9.4 release notes
Previous Message Merlin Moncure 2014-05-05 15:02:07 Re: Supporting multiple column assignment in UPDATE (9.5 project)