aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/pg_dump/pg_dump.c3
-rw-r--r--src/bin/pg_dump/pg_dump.h2
-rw-r--r--src/bin/pg_dump/pg_dump_sort.c4
3 files changed, 9 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index aa01d6a66c7..64c2673f9a5 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -6261,6 +6261,9 @@ getTriggers(Archive *fout, TableInfo tblinfo[], int numTables)
tginfo = (TriggerInfo *) pg_malloc(ntups * sizeof(TriggerInfo));
+ tbinfo->numTriggers = ntups;
+ tbinfo->triggers = tginfo;
+
for (j = 0; j < ntups; j++)
{
tginfo[j].dobj.objType = DO_TRIGGER;
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 78b2584ce62..9a1d8f863cc 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -257,6 +257,8 @@ typedef struct _tableInfo
int numParents; /* number of (immediate) parent tables */
struct _tableInfo **parents; /* TableInfos of immediate parents */
struct _tableDataInfo *dataObj; /* TableDataInfo, if dumping its data */
+ int numTriggers; /* number of triggers for table */
+ struct _triggerInfo *triggers; /* array of TriggerInfo structs */
} TableInfo;
typedef struct _attrDefInfo
diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c
index b0f6ace9a40..78ff59c3429 100644
--- a/src/bin/pg_dump/pg_dump_sort.c
+++ b/src/bin/pg_dump/pg_dump_sort.c
@@ -884,6 +884,7 @@ repairViewRuleMultiLoop(DumpableObject *viewobj,
{
TableInfo *viewinfo = (TableInfo *) viewobj;
RuleInfo *ruleinfo = (RuleInfo *) ruleobj;
+ int i;
/* remove view's dependency on rule */
removeObjectDependency(viewobj, ruleobj->dumpId);
@@ -901,6 +902,9 @@ repairViewRuleMultiLoop(DumpableObject *viewobj,
addObjectDependency(ruleobj, viewobj->dumpId);
/* now that rule is separate, it must be post-data */
addObjectDependency(ruleobj, postDataBoundId);
+ /* also, any triggers on the view must be dumped after the rule */
+ for (i = 0; i < viewinfo->numTriggers; i++)
+ addObjectDependency(&(viewinfo->triggers[i].dobj), ruleobj->dumpId);
}
/*