Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Prevent setting NO INHERIT on partitioned NOT NULL constraints

  1. Prevent setting NO INHERIT on partitioned not-null constraints

    Andreas Karlsson <andreas@proxel.se> — 2026-05-20T19:25:31Z

    Hi!
    
    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;
    
    -- 
    Andreas Karlsson
    Percona
    
  2. Re: Prevent setting NO INHERIT on partitioned not-null constraints

    Jim Jones <jim.jones@uni-muenster.de> — 2026-05-21T15:01:51Z

    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
    
    
    
    
    
  3. Re: Prevent setting NO INHERIT on partitioned not-null constraints

    Andreas Karlsson <andreas@proxel.se> — 2026-05-21T21:22:31Z

    On 5/21/26 5:01 PM, Jim Jones wrote:
    > 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, that was a copy pasto. Version 2 is attached.
    
    -- 
    Andreas Karlsson
    Percona
    
  4. Re: Prevent setting NO INHERIT on partitioned not-null constraints

    Fujii Masao <masao.fujii@gmail.com> — 2026-05-22T01:10:46Z

    On Fri, May 22, 2026 at 6:22 AM Andreas Karlsson <andreas@proxel.se> wrote:
    >
    > On 5/21/26 5:01 PM, Jim Jones wrote:
    > > 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, that was a copy pasto. Version 2 is attached.
    
    Thanks for the patch! It looks good to me.
    Barring any objections, I will commit it.
    
    This should be backpatched to v18, where ALTER TABLE ... ALTER
    CONSTRAINT ... [NO] INHERIT
    was added. Right?
    
    Regards,
    
    -- 
    Fujii Masao
    
    
    
    
  5. Re: Prevent setting NO INHERIT on partitioned not-null constraints

    Andreas Karlsson <andreas@proxel.se> — 2026-05-22T08:10:41Z

    On 5/22/26 3:10 AM, Fujii Masao wrote:
    > This should be backpatched to v18, where ALTER TABLE ... ALTER
    > CONSTRAINT ... [NO] INHERIT
    > was added. Right?
    Yes, as this is a bug I think it should be backpatched to 18.
    
    -- 
    Andreas Karlsson
    Percona
    
    
    
    
    
  6. Re: Prevent setting NO INHERIT on partitioned not-null constraints

    Fujii Masao <masao.fujii@gmail.com> — 2026-05-22T15:02:47Z

    On Fri, May 22, 2026 at 5:10 PM Andreas Karlsson <andreas@proxel.se> wrote:
    >
    > On 5/22/26 3:10 AM, Fujii Masao wrote:
    > > This should be backpatched to v18, where ALTER TABLE ... ALTER
    > > CONSTRAINT ... [NO] INHERIT
    > > was added. Right?
    > Yes, as this is a bug I think it should be backpatched to 18.
    
    I've pushed the patch. Thanks!
    
    Regards,
    
    -- 
    Fujii Masao