Re: using index or check in ALTER TABLE SET NOT NULL

Dmitry Dolgov <9erthalion6@gmail.com>

From: Dmitry Dolgov <9erthalion6@gmail.com>
To: sk@zsrv.org, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>, alvherre@alvh.no-ip.org, Stephen Frost <sfrost@snowman.net>, Robert Haas <robertmhaas@gmail.com>, i.musin@postgrespro.ru, Tom Lane <tgl@sss.pgh.pa.us>
Date: 2018-11-13T12:47:52Z
Lists: pgsql-hackers
> On Sun, 4 Nov 2018 at 19:03, Sergei Kornilov <sk@zsrv.org> wrote:
>
> > If not properly cataloguing NOT NULL constraints would be fixed, can it
> > potentially conflict with the current patch or not?
> We already doing same stuff for "alter table attach partition" and in this patch i use exactly this routine. If proper cataloguing would conflict with my patch - it would conflict with "attach partition" validation too.
> I think proper cataloguing can be implemented without conflict with proposed feature.

Yes, indeed, this patch relies on the PartConstraintImpliedByRelConstraint.
Then maybe it makes sense to go with the solution, proposed in this thread,
while leaving open the possibility of having "SET NOT NULL NOT VALID"? From
the functionality point of view it definitely would be beneficial. Any other
opinions?


Commits

  1. Avoid using INFO elevel for what are fundamentally debug messages.

  2. Revert setting client_min_messages to 'debug1' in new tests.

  3. Allow ALTER TABLE .. SET NOT NULL to skip provably unnecessary scans.

  4. Improve predtest.c's internal docs, and enhance its functionality a bit.