Re: Get last generated serial sequence and set it up when explicit value is used

From: Sebastien FLAESCH <sf(at)4js(dot)com>
To: pgsql-sql(at)lists(dot)postgresql(dot)org
Subject: Re: Get last generated serial sequence and set it up when explicit value is used
Date: 2020-11-21 09:26:07
Message-ID: d375a643-eb10-d476-ee38-060a9d5e5d1e@4js.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hello everyone!

I believe I have a solution using a single SQL command.

Check this out... do you see any potential issues?

Any simpler way or more efficient code?

Note the insert with value 50, lower than previously inserted values, otherwise,
the returning clause would just need to be

returning pkey, setval('mytab1_pkey_seq',pkey,true)

Note also that I want to return the pkey to use the generated serial in the
program code...

=====

create table mytab1 ( pkey serial not null primary key, name varchar(50) );

insert into mytab1 (name) values ('aaa')
returning pkey, (select case when pkey > (select last_value from mytab1_pkey_seq)
then setval('mytab1_pkey_seq',pkey,true)
else 0
end );

insert into mytab1 (pkey,name) values (100,'bbb')
returning pkey, (select case when pkey > (select last_value from mytab1_pkey_seq)
then setval('mytab1_pkey_seq',pkey,true)
else 0
end );

insert into mytab1 (name) values ('ccc')
returning pkey, (select case when pkey > (select last_value from mytab1_pkey_seq)
then setval('mytab1_pkey_seq',pkey,true)
else 0
end );

insert into mytab1 (pkey,name) values (50,'ddd')
returning pkey, (select case when pkey > (select last_value from mytab1_pkey_seq)
then setval('mytab1_pkey_seq',pkey,true)
else 0
end );

insert into mytab1 (name) values ('eee')
returning pkey, (select case when pkey > (select last_value from mytab1_pkey_seq)
then setval('mytab1_pkey_seq',pkey,true)
else 0
end );

select * from mytab1 order by name;

=====

SELECT output:

pkey | name
------+------
1 | aaa
100 | bbb
101 | ccc
50 | ddd
102 | eee
(5 rows)

PostgreSQL rocks!

Seb

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Sebastien FLAESCH 2020-11-25 11:32:57 Re: Get last generated serial sequence and set it up when explicit value is used
Previous Message Christophe Pettus 2020-11-20 17:01:39 Re: perform setval() fails?