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
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