diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index aa01d6a66c7d9be557bb1f67d3c9d1820e8f235d..64c2673f9a598d748b611e6781a964c483ea6515 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 78b2584ce6299c2a8b70ebb0db45ec6086262a45..9a1d8f863cc3d3ec83c9fe7a0d83ef46bbcf3ff1 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 b0f6ace9a40f669c802db33492d07d9ee3af197b..78ff59c342998295ceaee04f1a074b90787842c7 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); } /*