From 3e5d1deac3096b2e3b0a465d8eba7b34cd72363d Mon Sep 17 00:00:00 2001 From: jian he Date: Tue, 15 Jul 2025 15:39:39 +0800 Subject: [PATCH v5 1/1] fix pg_dump domain not valid constraint comments comments on a domain's "NOT VALID" constraint should be dumped only after the constraint's definition has been dumped. So overall: dumpConstraint: handles dumping separate "NOT VALID" domain constraints along with their comments. dumpDomain: handles dumping "inlined" valid (not separate) domain constraints together with their comments. --- src/bin/pg_dump/pg_dump.c | 40 +++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 2253f772fcc..f9cb9339712 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12633,22 +12633,25 @@ dumpDomain(Archive *fout, const TypeInfo *tyinfo) for (i = 0; i < tyinfo->nDomChecks; i++) { ConstraintInfo *domcheck = &(tyinfo->domChecks[i]); - PQExpBuffer conprefix = createPQExpBuffer(); + if (!domcheck->separate) + { + PQExpBuffer conprefix = createPQExpBuffer(); - appendPQExpBuffer(conprefix, "CONSTRAINT %s ON DOMAIN", - fmtId(domcheck->dobj.name)); + appendPQExpBuffer(conprefix, "CONSTRAINT %s ON DOMAIN", + fmtId(domcheck->dobj.name)); - if (domcheck->dobj.dump & DUMP_COMPONENT_COMMENT) - dumpComment(fout, conprefix->data, qtypname, - tyinfo->dobj.namespace->dobj.name, - tyinfo->rolname, - domcheck->dobj.catId, 0, tyinfo->dobj.dumpId); + if (domcheck->dobj.dump & DUMP_COMPONENT_COMMENT) + dumpComment(fout, conprefix->data, qtypname, + tyinfo->dobj.namespace->dobj.name, + tyinfo->rolname, + domcheck->dobj.catId, 0, tyinfo->dobj.dumpId); - destroyPQExpBuffer(conprefix); + destroyPQExpBuffer(conprefix); + } } /* And a comment on the not-null constraint, if there's one */ - if (tyinfo->notnull != NULL) + if (tyinfo->notnull != NULL && !tyinfo->notnull->separate) { PQExpBuffer conprefix = createPQExpBuffer(); @@ -18563,6 +18566,23 @@ dumpConstraint(Archive *fout, const ConstraintInfo *coninfo) .section = SECTION_POST_DATA, .createStmt = q->data, .dropStmt = delq->data)); + + if (coninfo->dobj.dump & DUMP_COMPONENT_COMMENT) + { + char *qtypname; + + PQExpBuffer conprefix = createPQExpBuffer(); + qtypname = pg_strdup(fmtId(tyinfo->dobj.name)); + + appendPQExpBuffer(conprefix, "CONSTRAINT %s ON DOMAIN", + fmtId(coninfo->dobj.name)); + + dumpComment(fout, conprefix->data, qtypname, + tyinfo->dobj.namespace->dobj.name, + tyinfo->rolname, + coninfo->dobj.catId, 0, tyinfo->dobj.dumpId); + destroyPQExpBuffer(conprefix); + } } } else -- 2.34.1