plpgsql plan caching allowing invalid data to enter table?

From: Joe Van Dyk <joe(at)tanga(dot)com>
To: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: plpgsql plan caching allowing invalid data to enter table?
Date: 2013-07-09 23:05:27
Message-ID: CACfv+pJUbc5Kg7HQ-xSpw_HDhExZWOWhff0pVyADb24bkokaaQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-general

It's looking like I can use a plpgsql function to insert data into a table
that violates a domain constraint. Is this a known problem?

Session 1:

create domain my_domain text check (length(value) > 2);
create table my_table (name my_domain);

create function f(text) returns void as $$
declare my_var my_domain := $1;
begin
insert into my_table values (my_var);
end $$ language plpgsql;

Session 2:
select f('test');
delete from my_table;
-- Keep session open!

Session 1:
alter domain my_domain drop constraint my_domain_check;
alter domain my_domain add constraint my_domain_check check (length(value)
> 5);

Session 2:
select f('test');
-- This works, but it should fail.
-- I have a constraint of more than 5 characters on the domain.
-- But I can insert a row with 4 characters.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Joe Van Dyk 2013-07-09 23:12:01 Re: plpgsql plan caching allowing invalid data to enter table?
Previous Message lalbin 2013-07-09 22:05:20 BUG #8291: postgres_fdw does not re-read USER MAPING after change.

Browse pgsql-general by date

  From Date Subject
Next Message Joe Van Dyk 2013-07-09 23:12:01 Re: plpgsql plan caching allowing invalid data to enter table?
Previous Message Jeff Janes 2013-07-09 21:21:30 Re: Force ssl connection