BUG #16150: UPDATE set NULL value in non-null columns

PG Bug reporting form <[email protected]>
Newsgroups gmane.comp.db.postgresql.bugs
Message-ID <[email protected]>
The following bug has been logged on the website:

Bug reference:      16150
Logged by:          Maxim Votyakov
Email address:      [email protected]
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.