BUG #16733: insert into on conflict(pk) do nothing error violates not-null constraint

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

BUG #16733: insert into on conflict(pk) do nothing error violates not-null constraint

apt.postgresql.org Repository Update
The following bug has been logged on the website:

Bug reference:      16733
Logged by:          zhongxuchen
Email address:      [hidden email]
PostgreSQL version: 12.3
Operating system:   centos8
Description:        

sorry ,A scene that was missed before!

1、postgresql insert()values()on conflict (pk) do update/ do nothing
当某个字段在数据库中设置为not null,SQL 错误 [23502]: ERROR: null value in column "name"
violates not-null constraint

example:
CREATE TABLE TEST1 (
id varchar(100) NOT NULL,
name varchar(100) NOT NULL,
status varchar(100) NOT NULL,
CONSTRAINT test1_pkey PRIMARY KEY (id)
)

Initialization data
insert into TEST1 (ID, NAME,STATUS ) values('4','test','6') ;

Error scenarios:
1、insert into TEST1 as t1 (ID, NAME,STATUS ) values('4',null,'6') on
conflict
(id) do update set NAME=COALESCE(excluded.NAME,t1.NAME),
STATUS=COALESCE(excluded.STATUS,t1.STATUS);

2、insert into TEST1 as t1 (ID, NAME,STATUS ) values('4',null,'6') on
conflict
(id) do nothing

Reply | Threaded
Open this post in threaded view
|

Re: BUG #16733: insert into on conflict(pk) do nothing error violates not-null constraint

Heikki Linnakangas
On 20/11/2020 07:39, PG Bug reporting form wrote:

> The following bug has been logged on the website:
>
> Bug reference:      16733
> Logged by:          zhongxuchen
> Email address:      [hidden email]
> PostgreSQL version: 12.3
> Operating system:   centos8
> Description:
>
> sorry ,A scene that was missed before!

For the archives: I believe you're referring to
https://www.postgresql.org/message-id/16706-08837c0cdaf4ce57%40postgresql.org.

> 1、postgresql insert()values()on conflict (pk) do update/ do nothing
> 当某个字段在数据库中设置为not null,SQL 错误 [23502]: ERROR: null value in column "name"
> violates not-null constraint
>
> example:
> CREATE TABLE TEST1 (
> id varchar(100) NOT NULL,
> name varchar(100) NOT NULL,
> status varchar(100) NOT NULL,
> CONSTRAINT test1_pkey PRIMARY KEY (id)
> )
>
> Initialization data
> insert into TEST1 (ID, NAME,STATUS ) values('4','test','6') ;
>
> Error scenarios:
> 1、insert into TEST1 as t1 (ID, NAME,STATUS ) values('4',null,'6') on
> conflict
> (id) do update set NAME=COALESCE(excluded.NAME,t1.NAME),
> STATUS=COALESCE(excluded.STATUS,t1.STATUS);
>
> 2、insert into TEST1 as t1 (ID, NAME,STATUS ) values('4',null,'6') on
> conflict
> (id) do nothing

Both of these fail with an error:

ERROR:  null value in column "name" of relation "test1" violates
not-null constraint
DETAIL:  Failing row contains (4, null, 6).

This is not a bug. The NOT NULL constraint is checked before checking
for conflicts.

- Heikki