Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kgP9q-0008JW-Li for pgsql-sql@arkaria.postgresql.org; Sat, 21 Nov 2020 09:26:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kgP9p-0003P1-DG for pgsql-sql@arkaria.postgresql.org; Sat, 21 Nov 2020 09:26:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kgP9p-0003Ou-6v for pgsql-sql@lists.postgresql.org; Sat, 21 Nov 2020 09:26:13 +0000 Received: from mail150.strasbourg.4js.com ([77.159.205.150]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kgP9n-0008TK-2W for pgsql-sql@lists.postgresql.org; Sat, 21 Nov 2020 09:26:12 +0000 Received: from [192.168.1.34] (lfbn-str-1-229-91.w86-243.abo.wanadoo.fr [86.243.189.91]) (authenticated bits=0) by mail150.strasbourg.4js.com (8.14.4/8.14.4/Debian-4+deb7u1) with ESMTP id 0AL9Q7MX021674 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Nov 2020 10:26:09 +0100 From: Sebastien FLAESCH Subject: Re: Get last generated serial sequence and set it up when explicit value is used To: pgsql-sql@lists.postgresql.org References: Organization: Four Js Development Tools Message-ID: Date: Sat, 21 Nov 2020 10:26:07 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Virus-Scanned: clamav-milter 0.99.4 at mail150 X-Virus-Status: Clean X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.6.2 (mail150.strasbourg.4js.com [10.10.0.1]); Sat, 21 Nov 2020 10:26:09 +0100 (CET) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk 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