Thread: [BUGS] BUG #14774: INSERT ... ON CONFLICT

[BUGS] BUG #14774: INSERT ... ON CONFLICT

From
jym@outlook.com
Date:
The following bug has been logged on the website:

Bug reference:      14774
Logged by:          Jym Morton
Email address:      jym@outlook.com
PostgreSQL version: 9.6.3
Operating system:   Windows 10
Description:

I've noticed that if there's a conflict the sequence still adds 1 even if
the INSERT is a conflict.

i.e. INSERT INTO foo(bar) VALUES ('test') ON CONFLICT bar = EXCLUDE.bar
returning foopk

bar has a UNIQUE constraint, doing this 10 times you see the Next serial in
foopk is 10 even though there is only 1 row in the table.


--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Re: [BUGS] BUG #14774: INSERT ... ON CONFLICT

From
Andres Freund
Date:
Hi,

On 2017-08-08 17:15:00 +0000, jym@outlook.com wrote:
> I've noticed that if there's a conflict the sequence still adds 1 even if
> the INSERT is a conflict.
> 
> i.e. INSERT INTO foo(bar) VALUES ('test') ON CONFLICT bar = EXCLUDE.bar
> returning foopk
> 
> bar has a UNIQUE constraint, doing this 10 times you see the Next serial in
> foopk is 10 even though there is only 1 row in the table.

That's behaving as expected. The full row, including the column that
defaults to the sequence, needs to be formed before checking for
conflicts.  Sequences are not gapless, and this is just one of many
examples.  Is there a specific reason this is a problem for you?

Greetings,

Andres Freund


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs