Re: 'Identifier' columns

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: David Favro <postgres(at)meta-dynamic(dot)com>, pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: 'Identifier' columns
Date: 2018-08-14 07:17:27
Message-ID: 1534231047.2379.8.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

David Favro wrote:
> A couple of questions about auto-assigned identifier columns,
> forgive my ignorance, I'm used to other methods to create IDs...
>
> 1. If creating a new application [i.e. no "legacy" reasons to do
> anything] using PostgreSQL 10, when creating an "auto-assigned
> integer ID" column, what are the advantages/disadvantages of using
> the 'SERIAL' datatype [or equivalent explicitly created SEQUENCE w/
> nextval() used as default for column] versus the SQL-standard
> 'integer GENERATED AS IDENTITY'? All other things being equal, it
> would seem a no-brainer to follow the standard.

Absolutely.
Use GENERATED ALWAYS AS IDENTITY.

> 2. When using the SQL-standard 'integer GENERATED AS IDENTITY'
> column, after inserting a column, what is the recommended method to
> find the ID of the just-inserted row? Is there no SQL-standard way?
> The docs seem to imply (without explicitly stating) that a SEQUENCE
> is used behind the scenes hence 'currval()' could be used, but I
> didn't see in the docs any mention of what the underlying sequence's
> name is, or how to specify a name. Perhaps 'lastval()' would work,
> but not in all cases and in any event it has a sloppy feel to me.

The best way is to use the (non-standard) RETURNING clause:

INSERT ... RETURNING id;

Yours,
Laurenz Albe
--
Cybertec | https://www.cybertec-postgresql.com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Jarosław Torbicki 2018-08-14 07:48:32 Uncaught PHP Exception Doctrine\DBAL\Exception\UniqueConstraintViolationException: "An exception occurred while executing 'UPDATE
Previous Message David Favro 2018-08-14 02:19:30 'Identifier' columns