Re: pg_dump does not dump domain not-null constraint's comments

From: jian he <jian(dot)universality(at)gmail(dot)com>
To: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: pg_dump does not dump domain not-null constraint's comments
Date: 2025-07-15 06:10:38
Message-ID: CACJufxF_C2pe6J_+nPr6C5jf5rQnbYP8XOKr4HM8yHZtp2aQqQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Jul 15, 2025 at 2:24 AM Álvaro Herrera <alvherre(at)kurilemu(dot)de> wrote:
>
> On 2025-May-22, jian he wrote:
>
> > I actually found another bug.
> > create schema test;
> > CREATE DOMAIN test.d1 AS integer NOT NULL default 11;
> > pg_dump --schema=test > 1.sql
> > ""
> > pg_dump: warning: could not resolve dependency loop among these items:
> > pg_dump: detail: TYPE d1 (ID 1415 OID 18007)
> > pg_dump: detail: CONSTRAINT d1_not_null (ID 1416 OID 18008)
> > ""
>
> Oh, interesting. I agree with the rough fix, but I think it's better if
> we keep the contype comparisons rather than removing them, relaxing to
> allow for one more char.
>
> I didn't like the idea of stashing the not-null constraint in the same
> array as the check constraints; it feels a bit dirty (especially because
> of the need to scan the array in order to find the not-null one). I
> opted to add a separate TypeInfo->notnull pointer instead. This feels
> more natural. This works because we know a domain has only one not-null
> constraint. Note that this means we don't need your proposed 0002
> anymore.
>
TypeInfo->notnull is much better than
TypeInfo->domChecks handle both check and not-null constraints.

>
> The attached applies on top of your patch. Opinions?
>

+ constraint->contype = *(PQgetvalue(res, i, i_contype));
can change to
constraint->contype = contype;

in getDomainConstraints, we use pg_malloc
constrinfo = (ConstraintInfo *) pg_malloc(ntups * sizeof(ConstraintInfo));
after
constraint->condeferred = false;
would better also add
constraint->conperiod = false;

accidently found another existing bug.

create schema test;
CREATE DOMAIN test.d1 AS integer NOT NULL default 11;
alter domain test.d1 add constraint a2 check(value > 1) not valid;
comment on CONSTRAINT a2 ON DOMAIN test.d1 is 'test';
dump output is:

CREATE SCHEMA test;
CREATE DOMAIN test.d1 AS integer NOT NULL DEFAULT 11;
COMMENT ON CONSTRAINT a2 ON DOMAIN test.d1 IS 'test';
ALTER DOMAIN test.d1
ADD CONSTRAINT a2 CHECK ((VALUE > 1)) NOT VALID;

Obviously the COMMENT command will error out.
currently working on a fix, just sharing the bug details in advance.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Japin Li 2025-07-15 06:10:44 Re: Requested WAL segment xxx has already been removed
Previous Message shveta malik 2025-07-15 05:57:08 Re: Logical Replication of sequences