Re: Prevent setting NO INHERIT on partitioned not-null constraints - Mailing list pgsql-hackers

From Jim Jones
Subject Re: Prevent setting NO INHERIT on partitioned not-null constraints
Date
Msg-id 24bfd6b7-d566-490c-812f-c61c9eb2ef69@uni-muenster.de
Whole thread
In response to Prevent setting NO INHERIT on partitioned not-null constraints  (Andreas Karlsson <andreas@proxel.se>)
Responses Re: Prevent setting NO INHERIT on partitioned not-null constraints
List pgsql-hackers
Hi Andreas

On 20/05/2026 21:25, Andreas Karlsson wrote:
> Me and Joel found a bug when working on another patch. We noticed that
> you cannot create not-null constraints with NO INHEIRT set on
> partitioned tables, but you can actually set it later by using ALTER
> CONSTRAINT. This must be an oversight so I have attached a patch which
> adds a check to prevent this.
> 
> The SQL below should give an error but does not:
> 
> CREATE TABLE t (
>   a int,
>   CONSTRAINT a_is_not_null NOT NULL a
> ) PARTITION BY LIST (a);
> 
> ALTER TABLE t ALTER CONSTRAINT a_is_not_null NO INHERIT;

+1 for the fix.

postgres=# CREATE TABLE t (
  a int,
  CONSTRAINT a_is_not_null NOT NULL a
) PARTITION BY LIST (a);
CREATE TABLE
postgres=# ALTER TABLE t ALTER CONSTRAINT a_is_not_null NO INHERIT;
ERROR:  not-null constraint "a_is_not_null" on partitioned table "t"
cannot be NO INHERIT

The errcode is most likely wrong:

ERRCODE_WRONG_OBJECT_TYPE -> ERRCODE_FEATURE_NOT_SUPPORTED

At least it is inconsistent with an equivalent check in parse_utilcmd.c:

if (cxt->ispartitioned && constraint->is_no_inherit)
  ereport(ERROR,
      errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
          errmsg("not-null constraints on partitioned tables cannot be
NO INHERIT"));

Thanks!

Best, Jim




pgsql-hackers by date:

Previous
From: SATYANARAYANA NARLAPURAM
Date:
Subject: Re: [PATCH] Release replication slot on error in SQL-callable slot functions
Next
From: Matheus Alcantara
Date:
Subject: Re: Avoid leaking system path from pg_available_extensions