Re: UPDATE using query; per-row function calling problem - Mailing list pgsql-general

From Rory Campbell-Lange
Subject Re: UPDATE using query; per-row function calling problem
Date
Msg-id 20110902104637.GA17028@campbell-lange.net
Whole thread Raw
In response to Re: UPDATE using query; per-row function calling problem  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: UPDATE using query; per-row function calling problem  (David Johnston <polobo@yahoo.com>)
Re: UPDATE using query; per-row function calling problem  (pasman pasmański <pasman.p@gmail.com>)
List pgsql-general
On 02/09/11, Tom Lane (tgl@sss.pgh.pa.us) wrote:
> Rory Campbell-Lange <rory@campbell-lange.net> writes:
> > I'm doing an UPDATE something like this:
> >     UPDATE
> >         slots
> >     SET
> >         a = 'a'
> >         ,b = (SELECT uuid_generate_v1())
> >     WHERE
> >         c = TRUE;
>
> > Each updated row in slots is getting the same value for b.

> That's Postgres' interpretation of an uncorrelated sub-SELECT: there's
> no reason to do it more than once, so it doesn't.
>
> > Is there a way of getting a per-row value from uuid_generate_v1()
> > without doing a PL loop?
>
> Drop the word "SELECT".  Why did you put that in in the first place?

Hi Tom

Good question to which I don't know the answer. Thanks very much for the
advice.

I was able to force a per-row call to uuid_generate_v1 by using this
pattern

    UPDATE
        r_slots
    SET b = (SELECT
                y.x
             FROM
                (select -1 as n, uuid_generate_v1() as x )y
             WHERE
                y.n != r_slots.id)
    ...

But
    b = uuid_generate_v1()
is a lot simpler!

In my "-1" example, am I right in assuming that I created a correlated
subquery rather than an correlated one? I'm confused about the
difference.

Many thanks
Rory




pgsql-general by date:

Previous
From: Vincent de Phily
Date:
Subject: Re: md5 of table
Next
From: gbrun
Date:
Subject: Re: Missing DLL after unplaned server stop