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

Commit 82ebda7

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 73fbf3d commit 82ebda7

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed

src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3267,6 +3267,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
32673267
strcmp(type, "DATABASE") == 0 ||
32683268
strcmp(type, "PROCEDURAL LANGUAGE") == 0 ||
32693269
strcmp(type, "SCHEMA") == 0 ||
3270+
strcmp(type, "EVENT TRIGGER") == 0 ||
32703271
strcmp(type, "FOREIGN DATA WRAPPER") == 0 ||
32713272
strcmp(type, "SERVER") == 0 ||
32723273
strcmp(type, "USER MAPPING") == 0)
@@ -3311,7 +3312,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
33113312
return;
33123313
}
33133314

3314-
write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
3315+
write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
33153316
type);
33163317
}
33173318

@@ -3470,6 +3471,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
34703471
strcmp(te->desc, "OPERATOR FAMILY") == 0 ||
34713472
strcmp(te->desc, "PROCEDURAL LANGUAGE") == 0 ||
34723473
strcmp(te->desc, "SCHEMA") == 0 ||
3474+
strcmp(te->desc, "EVENT TRIGGER") == 0 ||
34733475
strcmp(te->desc, "TABLE") == 0 ||
34743476
strcmp(te->desc, "TYPE") == 0 ||
34753477
strcmp(te->desc, "VIEW") == 0 ||
@@ -3505,7 +3507,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
35053507
}
35063508
else
35073509
{
3508-
write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
3510+
write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
35093511
te->desc);
35103512
}
35113513
}

src/bin/pg_dump/pg_dump.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16978,13 +16978,15 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
1697816978
{
1697916979
DumpOptions *dopt = fout->dopt;
1698016980
PQExpBuffer query;
16981+
PQExpBuffer delqry;
1698116982
PQExpBuffer labelq;
1698216983

1698316984
/* Skip if not to be dumped */
1698416985
if (!evtinfo->dobj.dump || dopt->dataOnly)
1698516986
return;
1698616987

1698716988
query = createPQExpBuffer();
16989+
delqry = createPQExpBuffer();
1698816990
labelq = createPQExpBuffer();
1698916991

1699016992
appendPQExpBufferStr(query, "CREATE EVENT TRIGGER ");
@@ -17024,21 +17026,29 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
1702417026
}
1702517027
appendPQExpBufferStr(query, ";\n");
1702617028
}
17029+
17030+
appendPQExpBuffer(delqry, "DROP EVENT TRIGGER %s;\n",
17031+
fmtId(evtinfo->dobj.name));
17032+
1702717033
appendPQExpBuffer(labelq, "EVENT TRIGGER %s",
1702817034
fmtId(evtinfo->dobj.name));
1702917035

1703017036
if (evtinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)
1703117037
ArchiveEntry(fout, evtinfo->dobj.catId, evtinfo->dobj.dumpId,
17032-
evtinfo->dobj.name, NULL, NULL, evtinfo->evtowner, false,
17038+
evtinfo->dobj.name, NULL, NULL,
17039+
evtinfo->evtowner, false,
1703317040
"EVENT TRIGGER", SECTION_POST_DATA,
17034-
query->data, "", NULL, NULL, 0, NULL, NULL);
17041+
query->data, delqry->data, NULL,
17042+
NULL, 0,
17043+
NULL, NULL);
1703517044

1703617045
if (evtinfo->dobj.dump & DUMP_COMPONENT_COMMENT)
1703717046
dumpComment(fout, labelq->data,
1703817047
NULL, evtinfo->evtowner,
1703917048
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
1704017049

1704117050
destroyPQExpBuffer(query);
17051+
destroyPQExpBuffer(delqry);
1704217052
destroyPQExpBuffer(labelq);
1704317053
}
1704417054

src/bin/pg_dump/t/002_pg_dump.pl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -516,18 +516,19 @@
516516
only_dump_test_table => 1,
517517
test_schema_plus_blobs => 1, }, },
518518

519-
# catch-all for ALTER ... OWNER (except LARGE OBJECTs)
520-
'ALTER ... OWNER commands (except LARGE OBJECTs)' => {
521-
regexp => qr/^ALTER (?!LARGE OBJECT)(.*) OWNER TO .*;/m,
519+
# catch-all for ALTER ... OWNER (except post-data objects)
520+
'ALTER ... OWNER commands (except post-data objects)' => {
521+
regexp => qr/^ALTER (?!EVENT TRIGGER|LARGE OBJECT)(.*) OWNER TO .*;/m,
522522
like => {}, # use more-specific options above
523523
unlike => {
524524
column_inserts => 1,
525525
data_only => 1,
526-
section_data => 1, }, },
526+
section_data => 1,
527+
section_post_data => 1, }, },
527528

528-
# catch-all for ALTER TABLE ...
529+
# catch-all for ALTER TABLE ... (except OWNER TO)
529530
'ALTER TABLE ... commands' => {
530-
regexp => qr/^ALTER TABLE .*;/m,
531+
regexp => qr/^ALTER TABLE .* (?!OWNER TO)(.*);/m,
531532
like => {}, # use more-specific options above
532533
unlike => {
533534
column_inserts => 1,
@@ -543,8 +544,7 @@
543544
unlike => {
544545
no_owner => 1,
545546
pg_dumpall_globals => 1,
546-
pg_dumpall_globals_clean => 1,
547-
section_post_data => 1, }, },
547+
pg_dumpall_globals_clean => 1, }, },
548548

549549
# 'BLOB load (contents are of test_table)' => {
550550
# create_order => 14,

0 commit comments

Comments
 (0)