Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3b3fcc4

Browse files
committed
pg_dump: Add table qualifications to some tags
Some object types have names that are only unique for one table. But for those we generally didn't put the table name into the dump TOC tag. So it was impossible to identify these objects if the same name was used for multiple tables. This affects policies, column defaults, constraints, triggers, and rules. Fix by adding the table name to the TOC tag, so that it now reads "$schema $table $object". Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
1 parent de94e2a commit 3b3fcc4

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

src/bin/pg_dump/pg_dump.c

+34-8
Original file line numberDiff line numberDiff line change
@@ -3080,6 +3080,7 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
30803080
PQExpBuffer query;
30813081
PQExpBuffer delqry;
30823082
const char *cmd;
3083+
char *tag;
30833084

30843085
if (dopt->dataOnly)
30853086
return;
@@ -3147,8 +3148,10 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
31473148
appendPQExpBuffer(delqry, "DROP POLICY %s", fmtId(polinfo->polname));
31483149
appendPQExpBuffer(delqry, " ON %s;\n", fmtId(tbinfo->dobj.name));
31493150

3151+
tag = psprintf("%s %s", tbinfo->dobj.name, polinfo->dobj.name);
3152+
31503153
ArchiveEntry(fout, polinfo->dobj.catId, polinfo->dobj.dumpId,
3151-
polinfo->dobj.name,
3154+
tag,
31523155
polinfo->dobj.namespace->dobj.name,
31533156
NULL,
31543157
tbinfo->rolname, false,
@@ -3157,6 +3160,7 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
31573160
NULL, 0,
31583161
NULL, NULL);
31593162

3163+
free(tag);
31603164
destroyPQExpBuffer(query);
31613165
destroyPQExpBuffer(delqry);
31623166
}
@@ -14832,6 +14836,7 @@ dumpAttrDef(Archive *fout, AttrDefInfo *adinfo)
1483214836
int adnum = adinfo->adnum;
1483314837
PQExpBuffer q;
1483414838
PQExpBuffer delq;
14839+
char *tag;
1483514840

1483614841
/* Skip if table definition not to be dumped */
1483714842
if (!tbinfo->dobj.dump || dopt->dataOnly)
@@ -14860,8 +14865,10 @@ dumpAttrDef(Archive *fout, AttrDefInfo *adinfo)
1486014865
appendPQExpBuffer(delq, "ALTER COLUMN %s DROP DEFAULT;\n",
1486114866
fmtId(tbinfo->attnames[adnum - 1]));
1486214867

14868+
tag = psprintf("%s %s", tbinfo->dobj.name, tbinfo->attnames[adnum - 1]);
14869+
1486314870
ArchiveEntry(fout, adinfo->dobj.catId, adinfo->dobj.dumpId,
14864-
tbinfo->attnames[adnum - 1],
14871+
tag,
1486514872
tbinfo->dobj.namespace->dobj.name,
1486614873
NULL,
1486714874
tbinfo->rolname,
@@ -14870,6 +14877,7 @@ dumpAttrDef(Archive *fout, AttrDefInfo *adinfo)
1487014877
NULL, 0,
1487114878
NULL, NULL);
1487214879

14880+
free(tag);
1487314881
destroyPQExpBuffer(q);
1487414882
destroyPQExpBuffer(delq);
1487514883
}
@@ -15010,6 +15018,7 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
1501015018
TableInfo *tbinfo = coninfo->contable;
1501115019
PQExpBuffer q;
1501215020
PQExpBuffer delq;
15021+
char *tag = NULL;
1501315022

1501415023
/* Skip if not to be dumped */
1501515024
if (!coninfo->dobj.dump || dopt->dataOnly)
@@ -15103,8 +15112,10 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
1510315112
appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
1510415113
fmtId(coninfo->dobj.name));
1510515114

15115+
tag = psprintf("%s %s", tbinfo->dobj.name, coninfo->dobj.name);
15116+
1510615117
ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
15107-
coninfo->dobj.name,
15118+
tag,
1510815119
tbinfo->dobj.namespace->dobj.name,
1510915120
indxinfo->tablespace,
1511015121
tbinfo->rolname, false,
@@ -15136,8 +15147,10 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
1513615147
appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
1513715148
fmtId(coninfo->dobj.name));
1513815149

15150+
tag = psprintf("%s %s", tbinfo->dobj.name, coninfo->dobj.name);
15151+
1513915152
ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
15140-
coninfo->dobj.name,
15153+
tag,
1514115154
tbinfo->dobj.namespace->dobj.name,
1514215155
NULL,
1514315156
tbinfo->rolname, false,
@@ -15171,8 +15184,10 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
1517115184
appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
1517215185
fmtId(coninfo->dobj.name));
1517315186

15187+
tag = psprintf("%s %s", tbinfo->dobj.name, coninfo->dobj.name);
15188+
1517415189
ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
15175-
coninfo->dobj.name,
15190+
tag,
1517615191
tbinfo->dobj.namespace->dobj.name,
1517715192
NULL,
1517815193
tbinfo->rolname, false,
@@ -15207,8 +15222,10 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
1520715222
appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
1520815223
fmtId(coninfo->dobj.name));
1520915224

15225+
tag = psprintf("%s %s", tyinfo->dobj.name, coninfo->dobj.name);
15226+
1521015227
ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
15211-
coninfo->dobj.name,
15228+
tag,
1521215229
tyinfo->dobj.namespace->dobj.name,
1521315230
NULL,
1521415231
tyinfo->rolname, false,
@@ -15228,6 +15245,7 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
1522815245
if (tbinfo && coninfo->separate)
1522915246
dumpTableConstraintComment(fout, coninfo);
1523015247

15248+
free(tag);
1523115249
destroyPQExpBuffer(q);
1523215250
destroyPQExpBuffer(delq);
1523315251
}
@@ -15581,6 +15599,7 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
1558115599
size_t lentgargs;
1558215600
const char *p;
1558315601
int findx;
15602+
char *tag;
1558415603

1558515604
/*
1558615605
* we needn't check dobj.dump because TriggerInfo wouldn't have been
@@ -15757,8 +15776,10 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
1575715776
appendPQExpBuffer(labelq, "ON %s",
1575815777
fmtId(tbinfo->dobj.name));
1575915778

15779+
tag = psprintf("%s %s", tbinfo->dobj.name, tginfo->dobj.name);
15780+
1576015781
ArchiveEntry(fout, tginfo->dobj.catId, tginfo->dobj.dumpId,
15761-
tginfo->dobj.name,
15782+
tag,
1576215783
tbinfo->dobj.namespace->dobj.name,
1576315784
NULL,
1576415785
tbinfo->rolname, false,
@@ -15771,6 +15792,7 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
1577115792
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
1577215793
tginfo->dobj.catId, 0, tginfo->dobj.dumpId);
1577315794

15795+
free(tag);
1577415796
destroyPQExpBuffer(query);
1577515797
destroyPQExpBuffer(delqry);
1577615798
destroyPQExpBuffer(labelq);
@@ -15861,6 +15883,7 @@ dumpRule(Archive *fout, RuleInfo *rinfo)
1586115883
PQExpBuffer delcmd;
1586215884
PQExpBuffer labelq;
1586315885
PGresult *res;
15886+
char *tag;
1586415887

1586515888
/* Skip if not to be dumped */
1586615889
if (!rinfo->dobj.dump || dopt->dataOnly)
@@ -15958,8 +15981,10 @@ dumpRule(Archive *fout, RuleInfo *rinfo)
1595815981
appendPQExpBuffer(labelq, " ON %s",
1595915982
fmtId(tbinfo->dobj.name));
1596015983

15984+
tag = psprintf("%s %s", tbinfo->dobj.name, rinfo->dobj.name);
15985+
1596115986
ArchiveEntry(fout, rinfo->dobj.catId, rinfo->dobj.dumpId,
15962-
rinfo->dobj.name,
15987+
tag,
1596315988
tbinfo->dobj.namespace->dobj.name,
1596415989
NULL,
1596515990
tbinfo->rolname, false,
@@ -15976,6 +16001,7 @@ dumpRule(Archive *fout, RuleInfo *rinfo)
1597616001

1597716002
PQclear(res);
1597816003

16004+
free(tag);
1597916005
destroyPQExpBuffer(query);
1598016006
destroyPQExpBuffer(cmd);
1598116007
destroyPQExpBuffer(delcmd);

0 commit comments

Comments
 (0)