Re: UUID vs serial and currval('sequence_id')

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Robert Stanford <rstanford(at)gmail(dot)com>
Cc: "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: UUID vs serial and currval('sequence_id')
Date: 2022-05-02 23:27:07
Message-ID: CAKFQuwaNO9XBtDPYgrg1ntQd---QuO2fQEodOKVe5cFuqizdOA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mon, May 2, 2022 at 4:24 PM Robert Stanford <rstanford(at)gmail(dot)com> wrote:

> On Tue, 3 May 2022 at 08:39, David G. Johnston <david(dot)g(dot)johnston(at)gmail(dot)com>
> wrote:
>
>> You basically have to use "INSERT ... RETURNING" or variables. Which/how
>> depends on the language you are writing in. Pure SQL without client
>> involvement requires that you use chained CTEs of INSERT...RETURNING (or I
>> suppose you could leverage set_config(), haven't tried that way myself).
>> In pl/pgsql you can also use variables, and the same goes for psql - though
>> that requires client involvement and so isn't generally that great a choice.
>>
>>
> Thanks, so I can do:
>
> alter table contact add column contactuuid uuid
> alter table contactinterests add column contactuuid uuid
> alter table contactinterests drop column contactid
>
> with thisuuid as (
> SELECT gen_random_uuid() as thisuuid
> ),
> contactuuid as(
> INSERT INTO contact(
> contactuuid,firstname, lastname)
> VALUES(
> (select thisuuid from thisuuid ),'John', 'Smith') returning
> (select thisuuid from thisuuid )
> )
> INSERT INTO contactinterests(
> contactuuid, interest)
> VALUES (
> (select thisuuid from contactuuid ),'Fishing')
> returning (select thisuuid from contactuuid );
>
>
It works but "returning contactuuid" is considerably easier to understand
and probably cheaper to execute.

If you are going to pre-compute the uuid the returning clause becomes
pointless though, as your example demonstrates - you never actually use the
returned value.

I suggest avoiding naming the CTE query and the column(s) it produces the
same thing.

David J.

David J.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Steve Litt 2022-05-03 05:49:41 Re: External psql editor
Previous Message Robert Stanford 2022-05-02 23:24:24 Re: UUID vs serial and currval('sequence_id')