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.
My guess this has more to do with MVCC. Session 1 and 2 are looking at different snapshots of the database and acting accordingly.
Hm, I'd be surprised -- there's no multi-statement transactions used here. My guess is that the check constraint gets cached by the plpgsql function and there's no check of the constraint when the data is being inserted inside the function body.
In any event, I shouldn't be allowed to have data in a table that violates a check constraint.