Re: NOT ENFORCED constraint feature - Mailing list pgsql-hackers

From Isaac Morland
Subject Re: NOT ENFORCED constraint feature
Date
Msg-id CAMsGm5eiZDTPu9L-Xd2as=WiJ2C7rL72YT_5g0fxh6xiXhLL1g@mail.gmail.com
Whole thread Raw
In response to Re: NOT ENFORCED constraint feature  (Álvaro Herrera <alvherre@alvh.no-ip.org>)
Responses Re: NOT ENFORCED constraint feature
List pgsql-hackers
On Mon, 10 Feb 2025 at 13:48, Álvaro Herrera <alvherre@alvh.no-ip.org> wrote:

I think this proposed state of affairs is problematic.  Current queries that assume that pg_constraint.convalidated means that a constraint is validated would be broken.  My suggestion at this point is that instead of adding a separate boolean column to pg_constraint we should be replacing `bool convalidated` with `char convalidity`, with new defines for all the possible states we require: enforced-and-valid ("V"alid), enforced-not-validated ("i"nvalid), not-enforced-and-not-valid (terribly "I"nvalid or maybe "U"nenforced), not-enforced-but-was-valid-before-turning-unenforced ("u"nenforced).  Breaking user queries would make all apps reassess what do they actually want to know about the constraint without assumptions of how enforcement worked in existing Postgres releases.

I'm having a lot of trouble understanding the operational distinction between your 'u' and 'U'. If it's not enforced, it cannot be assumed to be valid, regardless of whether it was valid in the past. I'm not sure what I think of a single character vs. 2 booleans, but there are only 3 sensible states either way: valid enforced, invalid enforced, and invalid unenforced.

Additionally, if there are officially 4 status possibilities then all code that looks for unenforced constraints has to look for both valid and invalid unenforced constraints if we use a char; it's not as bad with 2 booleans because one can just check the "enforced" boolean.

pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Eagerly scan all-visible pages to amortize aggressive vacuum
Next
From: Sami Imseih
Date:
Subject: Re: [PATCH] Optionally record Plan IDs to track plan changes for a query