Thread: Mutable CHECK constraints?
We throw an error if the expression in a CREATE INDEX statement is not IMMUTABLE. But while the documentation notes that expressions in CHECK constraints are not to be immutable, we don't enforce that. Why don't we call something like CheckMutability inside cookConstraint? Sure, that wouldn't catch all abuse, but it would be better than nothing. There is of course the worry of breaking upgrade for unsafe constraints, but is there any other reason not to enforce immutability? Yours, Laurenz Albe
Laurenz Albe <laurenz.albe@cybertec.at> writes: > We throw an error if the expression in a CREATE INDEX statement is not IMMUTABLE. > But while the documentation notes that expressions in CHECK constraints are not > to be immutable, we don't enforce that. Why don't we call something like > CheckMutability inside cookConstraint? Sure, that wouldn't catch all abuse, > but it would be better than nothing. > There is of course the worry of breaking upgrade for unsafe constraints, but is > there any other reason not to enforce immutability? Yeah, that's exactly it, it's a historical exemption for compatibility reasons. There are discussions about this in the archives, if memory serves ... but I'm too tired to go digging. regards, tom lane
On Tue, 2023-01-24 at 01:38 -0500, Tom Lane wrote: > Laurenz Albe <laurenz.albe@cybertec.at> writes: > > We throw an error if the expression in a CREATE INDEX statement is not IMMUTABLE. > > But while the documentation notes that expressions in CHECK constraints are not > > to be immutable, we don't enforce that. Why don't we call something like > > CheckMutability inside cookConstraint? Sure, that wouldn't catch all abuse, > > but it would be better than nothing. > > > There is of course the worry of breaking upgrade for unsafe constraints, but is > > there any other reason not to enforce immutability? > > Yeah, that's exactly it, it's a historical exemption for compatibility > reasons. There are discussions about this in the archives, if memory > serves ... but I'm too tired to go digging. Thanks for the answer. A search turned up https://postgr.es/m/AANLkTikwFfvavEX9nDwcRD4_xJb_VAitMeP1IH4wpGIt%40mail.gmail.com Yours, Laurenz Albe