From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
---|---|
To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Cc: | maximaximax(at)gmail(dot)com |
Subject: | BUG #16150: UPDATE set NULL value in non-null columns |
Date: | 2019-12-05 09:17:34 |
Message-ID: | 16150-dc6886080d71e985@postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 16150
Logged by: Maxim Votyakov
Email address: maximaximax(at)gmail(dot)com
PostgreSQL version: 12.0
Operating system: Windows
Description:
Hi guys
Today I found a big problem, I can write a valid UPDATE which put NULL value
in non-null column.
Let's create a domain, two tables and insert 1 row into them:
create domain d_text_not_null as text default '' not null;
create table person (name d_text_not_null);
create table town (name d_text_not_null);
insert into person(name) values ('test');
insert into town(name) values ('test2');
select * from person; -- 1 row with value test
Now let's try to update person name to null. It failed and it is correct:
update person set name = null; -- SQL Error [23502]: ERROR: domain
d_text_not_null does not allow null values
But now let's try to update person name to with sub-query. It updates a row
without any problem:
update person set name = (select name from town where name = 'wrong'); -- 1
row updated
Let's check data and see the result:
select * from person; -- 1 row with value NULL in non-null column !!!
I think it is very dangerous and important bug and it has to be fixed to not
damage data in databases - if I backup/restore such tables they become
empty.
From | Date | Subject | |
---|---|---|---|
Next Message | PG Bug reporting form | 2019-12-05 10:39:25 | BUG #16151: startup timing problem |
Previous Message | Petr Fedorov | 2019-12-05 07:24:16 | A row-level trigger on a partitioned table is not created on a sub-partition created later |