aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-07-22 20:20:09 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-07-22 20:20:09 -0400
commit7debd9f79c98d059f38d524bb242e21433261e1e (patch)
treedd1a51d3e0c8261ac0453483809442e778959e88 /src
parented367be64b118bbcda2b4e59fbb44d45c07c80e0 (diff)
downloadpostgresql-7debd9f79c98d059f38d524bb242e21433261e1e.tar.gz
postgresql-7debd9f79c98d059f38d524bb242e21433261e1e.zip
Fix pg_dump's handling of event triggers.
pg_dump with the --clean option failed to emit DROP EVENT TRIGGER commands for event triggers. In a closely related oversight, it also did not emit ALTER OWNER commands for event triggers. Since only superusers can create event triggers, the latter oversight is of little practical consequence ... but if we're going to record an owner for event triggers, then surely pg_dump should preserve it. Per complaint from Greg Atkins. Back-patch to 9.3 where event triggers were introduced. Discussion: https://postgr.es/m/20170722191142.yi4e7tzcg3iacclg@gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c6
-rw-r--r--src/bin/pg_dump/pg_dump.c14
2 files changed, 16 insertions, 4 deletions
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index e7aeff0e096..410071106ae 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -3204,6 +3204,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
strcmp(type, "DATABASE") == 0 ||
strcmp(type, "PROCEDURAL LANGUAGE") == 0 ||
strcmp(type, "SCHEMA") == 0 ||
+ strcmp(type, "EVENT TRIGGER") == 0 ||
strcmp(type, "FOREIGN DATA WRAPPER") == 0 ||
strcmp(type, "SERVER") == 0 ||
strcmp(type, "USER MAPPING") == 0)
@@ -3248,7 +3249,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
return;
}
- write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
+ write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
type);
}
@@ -3407,6 +3408,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
strcmp(te->desc, "OPERATOR FAMILY") == 0 ||
strcmp(te->desc, "PROCEDURAL LANGUAGE") == 0 ||
strcmp(te->desc, "SCHEMA") == 0 ||
+ strcmp(te->desc, "EVENT TRIGGER") == 0 ||
strcmp(te->desc, "TABLE") == 0 ||
strcmp(te->desc, "TYPE") == 0 ||
strcmp(te->desc, "VIEW") == 0 ||
@@ -3442,7 +3444,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
}
else
{
- write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
+ write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
te->desc);
}
}
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index db99412607f..a0206274a45 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -15536,6 +15536,7 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
{
DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
+ PQExpBuffer delqry;
PQExpBuffer labelq;
/* Skip if not to be dumped */
@@ -15543,6 +15544,7 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
return;
query = createPQExpBuffer();
+ delqry = createPQExpBuffer();
labelq = createPQExpBuffer();
appendPQExpBufferStr(query, "CREATE EVENT TRIGGER ");
@@ -15582,19 +15584,27 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
}
appendPQExpBufferStr(query, ";\n");
}
+
+ appendPQExpBuffer(delqry, "DROP EVENT TRIGGER %s;\n",
+ fmtId(evtinfo->dobj.name));
+
appendPQExpBuffer(labelq, "EVENT TRIGGER %s",
fmtId(evtinfo->dobj.name));
ArchiveEntry(fout, evtinfo->dobj.catId, evtinfo->dobj.dumpId,
- evtinfo->dobj.name, NULL, NULL, evtinfo->evtowner, false,
+ evtinfo->dobj.name, NULL, NULL,
+ evtinfo->evtowner, false,
"EVENT TRIGGER", SECTION_POST_DATA,
- query->data, "", NULL, NULL, 0, NULL, NULL);
+ query->data, delqry->data, NULL,
+ NULL, 0,
+ NULL, NULL);
dumpComment(fout, labelq->data,
NULL, evtinfo->evtowner,
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
destroyPQExpBuffer(query);
+ destroyPQExpBuffer(delqry);
destroyPQExpBuffer(labelq);
}