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

Started by PG Bug reporting formover 5 years ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16733
Logged by: zhongxuchen
Email address: zhongxuchen@gmail.com
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

#2Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: PG Bug reporting form (#1)
Re: BUG #16733: insert into on conflict(pk) do nothing error violates not-null constraint

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: zhongxuchen@gmail.com
PostgreSQL version: 12.3
Operating system: centos8
Description:

sorry ,A scene that was missed before!

For the archives: I believe you're referring to
/messages/by-id/16706-08837c0cdaf4ce57@postgresql.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