Mutable CHECK constraints?

Started by Laurenz Albealmost 3 years ago3 messages
#1Laurenz Albe
laurenz.albe@cybertec.at

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#1)
Re: Mutable CHECK constraints?

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

#3Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Tom Lane (#2)
Re: Mutable CHECK constraints?

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
/messages/by-id/AANLkTikwFfvavEX9nDwcRD4_xJb_VAitMeP1IH4wpGIt@mail.gmail.com

Yours,
Laurenz Albe