v5-0001-fix-pg_dump-domain-not-valid-constraint-comments.no-cfbot

application/octet-stream

Filename: v5-0001-fix-pg_dump-domain-not-valid-constraint-comments.no-cfbot
Type: application/octet-stream
Part: 0
Message: Re: pg_dump does not dump domain not-null constraint's comments
From 3e5d1deac3096b2e3b0a465d8eba7b34cd72363d Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
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