Skip to content

Commit 68a22bc

Browse files
committed
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
1 parent 6d9de66 commit 68a22bc

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2994,6 +2994,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
29942994
if (strcmp(type, "DATABASE") == 0 ||
29952995
strcmp(type, "PROCEDURAL LANGUAGE") == 0 ||
29962996
strcmp(type, "SCHEMA") == 0 ||
2997+
strcmp(type, "EVENT TRIGGER") == 0 ||
29972998
strcmp(type, "FOREIGN DATA WRAPPER") == 0 ||
29982999
strcmp(type, "SERVER") == 0 ||
29993000
strcmp(type, "USER MAPPING") == 0)
@@ -3037,7 +3038,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
30373038
return;
30383039
}
30393040

3040-
write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
3041+
write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
30413042
type);
30423043
}
30433044

@@ -3194,6 +3195,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat
31943195
strcmp(te->desc, "OPERATOR FAMILY") == 0 ||
31953196
strcmp(te->desc, "PROCEDURAL LANGUAGE") == 0 ||
31963197
strcmp(te->desc, "SCHEMA") == 0 ||
3198+
strcmp(te->desc, "EVENT TRIGGER") == 0 ||
31973199
strcmp(te->desc, "TABLE") == 0 ||
31983200
strcmp(te->desc, "TYPE") == 0 ||
31993201
strcmp(te->desc, "VIEW") == 0 ||
@@ -3227,7 +3229,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat
32273229
}
32283230
else
32293231
{
3230-
write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
3232+
write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
32313233
te->desc);
32323234
}
32333235
}

src/bin/pg_dump/pg_dump.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14496,13 +14496,15 @@ static void
1449614496
dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
1449714497
{
1449814498
PQExpBuffer query;
14499+
PQExpBuffer delqry;
1449914500
PQExpBuffer labelq;
1450014501

1450114502
/* Skip if not to be dumped */
1450214503
if (!evtinfo->dobj.dump || dataOnly)
1450314504
return;
1450414505

1450514506
query = createPQExpBuffer();
14507+
delqry = createPQExpBuffer();
1450614508
labelq = createPQExpBuffer();
1450714509

1450814510
appendPQExpBuffer(query, "CREATE EVENT TRIGGER ");
@@ -14542,19 +14544,27 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
1454214544
}
1454314545
appendPQExpBuffer(query, ";\n");
1454414546
}
14547+
14548+
appendPQExpBuffer(delqry, "DROP EVENT TRIGGER %s;\n",
14549+
fmtId(evtinfo->dobj.name));
14550+
1454514551
appendPQExpBuffer(labelq, "EVENT TRIGGER %s",
1454614552
fmtId(evtinfo->dobj.name));
1454714553

1454814554
ArchiveEntry(fout, evtinfo->dobj.catId, evtinfo->dobj.dumpId,
14549-
evtinfo->dobj.name, NULL, NULL, evtinfo->evtowner, false,
14555+
evtinfo->dobj.name, NULL, NULL,
14556+
evtinfo->evtowner, false,
1455014557
"EVENT TRIGGER", SECTION_POST_DATA,
14551-
query->data, "", NULL, NULL, 0, NULL, NULL);
14558+
query->data, delqry->data, NULL,
14559+
NULL, 0,
14560+
NULL, NULL);
1455214561

1455314562
dumpComment(fout, labelq->data,
1455414563
NULL, evtinfo->evtowner,
1455514564
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
1455614565

1455714566
destroyPQExpBuffer(query);
14567+
destroyPQExpBuffer(delqry);
1455814568
destroyPQExpBuffer(labelq);
1455914569
}
1456014570

0 commit comments

Comments
 (0)