column pid is bigserial that I expect to return on both insert and update
I don't want to use ON CONFLICT since it would increasing the sequence
although it updating the data

On Thu, May 16, 2019 at 3:26 PM David Rowley <david.row...@2ndquadrant.com>
wrote:

> On Thu, 16 May 2019 at 19:56, Winanjaya Amijoyo
> <winanjaya.amij...@gmail.com> wrote:
> > when running query below, pid returns empty when inserting new record
> >
> > WITH s AS (
> >    SELECT pid FROM test WHERE area = 'test5'
> > ), i AS (
> >    INSERT INTO test (area)
> >    SELECT 'test5'
> >    WHERE NOT EXISTS (SELECT 1 FROM s)
> >    RETURNING pid
> > )
> > UPDATE area
> > SET last_update = CURRENT_TIMESTAMP
> > WHERE pid = (SELECT pid FROM s)
> > RETURNING pid;
>
> Isn't that because you're only inserting a value for the "area"
> column. "pid" will end up either NULL or be set to the value of the
> column's DEFAULT clause, if it has one.
>
> You might also want to look at INSERT ON CONFLICT DO NOTHING if you
> want that INSERT to work in concurrent environments. Docs in
> https://www.postgresql.org/docs/current/sql-insert.html
>
> --
>  David Rowley                   http://www.2ndQuadrant.com/
>  PostgreSQL Development, 24x7 Support, Training & Services
>

Reply via email to