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

Commit 93f039b

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 ab2324f commit 93f039b

File tree

3 files changed

+36
-24
lines changed

3 files changed

+36
-24
lines changed

src/bin/pg_dump/pg_backup_archiver.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -3313,6 +3313,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
33133313
strcmp(type, "DATABASE") == 0 ||
33143314
strcmp(type, "PROCEDURAL LANGUAGE") == 0 ||
33153315
strcmp(type, "SCHEMA") == 0 ||
3316+
strcmp(type, "EVENT TRIGGER") == 0 ||
33163317
strcmp(type, "FOREIGN DATA WRAPPER") == 0 ||
33173318
strcmp(type, "SERVER") == 0 ||
33183319
strcmp(type, "PUBLICATION") == 0 ||
@@ -3359,7 +3360,7 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
33593360
return;
33603361
}
33613362

3362-
write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
3363+
write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
33633364
type);
33643365
}
33653366

@@ -3518,6 +3519,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
35183519
strcmp(te->desc, "OPERATOR FAMILY") == 0 ||
35193520
strcmp(te->desc, "PROCEDURAL LANGUAGE") == 0 ||
35203521
strcmp(te->desc, "SCHEMA") == 0 ||
3522+
strcmp(te->desc, "EVENT TRIGGER") == 0 ||
35213523
strcmp(te->desc, "TABLE") == 0 ||
35223524
strcmp(te->desc, "TYPE") == 0 ||
35233525
strcmp(te->desc, "VIEW") == 0 ||
@@ -3556,7 +3558,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
35563558
}
35573559
else
35583560
{
3559-
write_msg(modulename, "WARNING: don't know how to set owner for object type %s\n",
3561+
write_msg(modulename, "WARNING: don't know how to set owner for object type \"%s\"\n",
35603562
te->desc);
35613563
}
35623564
}

src/bin/pg_dump/pg_dump.c

+12-2
Original file line numberDiff line numberDiff line change
@@ -16844,13 +16844,15 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
1684416844
{
1684516845
DumpOptions *dopt = fout->dopt;
1684616846
PQExpBuffer query;
16847+
PQExpBuffer delqry;
1684716848
PQExpBuffer labelq;
1684816849

1684916850
/* Skip if not to be dumped */
1685016851
if (!evtinfo->dobj.dump || dopt->dataOnly)
1685116852
return;
1685216853

1685316854
query = createPQExpBuffer();
16855+
delqry = createPQExpBuffer();
1685416856
labelq = createPQExpBuffer();
1685516857

1685616858
appendPQExpBufferStr(query, "CREATE EVENT TRIGGER ");
@@ -16890,21 +16892,29 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
1689016892
}
1689116893
appendPQExpBufferStr(query, ";\n");
1689216894
}
16895+
16896+
appendPQExpBuffer(delqry, "DROP EVENT TRIGGER %s;\n",
16897+
fmtId(evtinfo->dobj.name));
16898+
1689316899
appendPQExpBuffer(labelq, "EVENT TRIGGER %s",
1689416900
fmtId(evtinfo->dobj.name));
1689516901

1689616902
if (evtinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)
1689716903
ArchiveEntry(fout, evtinfo->dobj.catId, evtinfo->dobj.dumpId,
16898-
evtinfo->dobj.name, NULL, NULL, evtinfo->evtowner, false,
16904+
evtinfo->dobj.name, NULL, NULL,
16905+
evtinfo->evtowner, false,
1689916906
"EVENT TRIGGER", SECTION_POST_DATA,
16900-
query->data, "", NULL, NULL, 0, NULL, NULL);
16907+
query->data, delqry->data, NULL,
16908+
NULL, 0,
16909+
NULL, NULL);
1690116910

1690216911
if (evtinfo->dobj.dump & DUMP_COMPONENT_COMMENT)
1690316912
dumpComment(fout, labelq->data,
1690416913
NULL, evtinfo->evtowner,
1690516914
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
1690616915

1690716916
destroyPQExpBuffer(query);
16917+
destroyPQExpBuffer(delqry);
1690816918
destroyPQExpBuffer(labelq);
1690916919
}
1691016920

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

+20-20
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@
466466
'ALTER COLLATION test0 OWNER TO' => {
467467
all_runs => 1,
468468
catch_all =>
469-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
469+
'ALTER ... OWNER commands (except post-data objects)',
470470
regexp => qr/^ALTER COLLATION test0 OWNER TO .*;/m,
471471
collation => 1,
472472
like => {
@@ -493,7 +493,7 @@
493493
'ALTER FOREIGN DATA WRAPPER dummy OWNER TO' => {
494494
all_runs => 1,
495495
catch_all =>
496-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
496+
'ALTER ... OWNER commands (except post-data objects)',
497497
regexp => qr/^ALTER FOREIGN DATA WRAPPER dummy OWNER TO .*;/m,
498498
like => {
499499
binary_upgrade => 1,
@@ -520,7 +520,7 @@
520520
'ALTER SERVER s1 OWNER TO' => {
521521
all_runs => 1,
522522
catch_all =>
523-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
523+
'ALTER ... OWNER commands (except post-data objects)',
524524
regexp => qr/^ALTER SERVER s1 OWNER TO .*;/m,
525525
like => {
526526
binary_upgrade => 1,
@@ -547,7 +547,7 @@
547547
'ALTER FUNCTION dump_test.pltestlang_call_handler() OWNER TO' => {
548548
all_runs => 1,
549549
catch_all =>
550-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
550+
'ALTER ... OWNER commands (except post-data objects)',
551551
regexp => qr/^
552552
\QALTER FUNCTION dump_test.pltestlang_call_handler() \E
553553
\QOWNER TO \E
@@ -576,7 +576,7 @@
576576
'ALTER OPERATOR FAMILY dump_test.op_family OWNER TO' => {
577577
all_runs => 1,
578578
catch_all =>
579-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
579+
'ALTER ... OWNER commands (except post-data objects)',
580580
regexp => qr/^
581581
\QALTER OPERATOR FAMILY dump_test.op_family USING btree \E
582582
\QOWNER TO \E
@@ -655,7 +655,7 @@
655655
'ALTER OPERATOR CLASS dump_test.op_class OWNER TO' => {
656656
all_runs => 1,
657657
catch_all =>
658-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
658+
'ALTER ... OWNER commands (except post-data objects)',
659659
regexp => qr/^
660660
\QALTER OPERATOR CLASS dump_test.op_class USING btree \E
661661
\QOWNER TO \E
@@ -746,7 +746,7 @@
746746
'ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO' => {
747747
all_runs => 1,
748748
catch_all =>
749-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
749+
'ALTER ... OWNER commands (except post-data objects)',
750750
regexp => qr/^ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO .*;/m,
751751
like => {
752752
binary_upgrade => 1,
@@ -772,7 +772,7 @@
772772
'ALTER SCHEMA dump_test OWNER TO' => {
773773
all_runs => 1,
774774
catch_all =>
775-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
775+
'ALTER ... OWNER commands (except post-data objects)',
776776
regexp => qr/^ALTER SCHEMA dump_test OWNER TO .*;/m,
777777
like => {
778778
binary_upgrade => 1,
@@ -798,7 +798,7 @@
798798
'ALTER SCHEMA dump_test_second_schema OWNER TO' => {
799799
all_runs => 1,
800800
catch_all =>
801-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
801+
'ALTER ... OWNER commands (except post-data objects)',
802802
regexp => qr/^ALTER SCHEMA dump_test_second_schema OWNER TO .*;/m,
803803
like => {
804804
binary_upgrade => 1,
@@ -1193,7 +1193,7 @@
11931193
'ALTER TABLE test_table OWNER TO' => {
11941194
all_runs => 1,
11951195
catch_all =>
1196-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1196+
'ALTER ... OWNER commands (except post-data objects)',
11971197
regexp => qr/^ALTER TABLE test_table OWNER TO .*;/m,
11981198
like => {
11991199
binary_upgrade => 1,
@@ -1251,7 +1251,7 @@
12511251
'ALTER TABLE test_second_table OWNER TO' => {
12521252
all_runs => 1,
12531253
catch_all =>
1254-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1254+
'ALTER ... OWNER commands (except post-data objects)',
12551255
regexp => qr/^ALTER TABLE test_second_table OWNER TO .*;/m,
12561256
like => {
12571257
binary_upgrade => 1,
@@ -1278,7 +1278,7 @@
12781278
'ALTER TABLE test_third_table OWNER TO' => {
12791279
all_runs => 1,
12801280
catch_all =>
1281-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1281+
'ALTER ... OWNER commands (except post-data objects)',
12821282
regexp => qr/^ALTER TABLE test_third_table OWNER TO .*;/m,
12831283
like => {
12841284
binary_upgrade => 1,
@@ -1305,7 +1305,7 @@
13051305
'ALTER TABLE measurement OWNER TO' => {
13061306
all_runs => 1,
13071307
catch_all =>
1308-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1308+
'ALTER ... OWNER commands (except post-data objects)',
13091309
regexp => qr/^ALTER TABLE measurement OWNER TO .*;/m,
13101310
like => {
13111311
binary_upgrade => 1,
@@ -1332,7 +1332,7 @@
13321332
'ALTER TABLE measurement_y2006m2 OWNER TO' => {
13331333
all_runs => 1,
13341334
catch_all =>
1335-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1335+
'ALTER ... OWNER commands (except post-data objects)',
13361336
regexp => qr/^ALTER TABLE measurement_y2006m2 OWNER TO .*;/m,
13371337
like => {
13381338
binary_upgrade => 1,
@@ -1359,7 +1359,7 @@
13591359
'ALTER FOREIGN TABLE foreign_table OWNER TO' => {
13601360
all_runs => 1,
13611361
catch_all =>
1362-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1362+
'ALTER ... OWNER commands (except post-data objects)',
13631363
regexp => qr/^ALTER FOREIGN TABLE foreign_table OWNER TO .*;/m,
13641364
like => {
13651365
binary_upgrade => 1,
@@ -1386,7 +1386,7 @@
13861386
'ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 OWNER TO' => {
13871387
all_runs => 1,
13881388
catch_all =>
1389-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1389+
'ALTER ... OWNER commands (except post-data objects)',
13901390
regexp =>
13911391
qr/^ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 OWNER TO .*;/m,
13921392
like => {
@@ -1414,7 +1414,7 @@
14141414
'ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 OWNER TO' => {
14151415
all_runs => 1,
14161416
catch_all =>
1417-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)',
1417+
'ALTER ... OWNER commands (except post-data objects)',
14181418
regexp =>
14191419
qr/^ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 OWNER TO .*;/m,
14201420
like => {
@@ -1439,11 +1439,11 @@
14391439
only_dump_test_table => 1,
14401440
role => 1, }, },
14411441

1442-
# catch-all for ALTER ... OWNER (except LARGE OBJECTs and PUBLICATIONs)
1443-
'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)' => {
1442+
# catch-all for ALTER ... OWNER (except post-data objects)
1443+
'ALTER ... OWNER commands (except post-data objects)' => {
14441444
all_runs => 0, # catch-all
14451445
regexp =>
1446-
qr/^ALTER (?!LARGE OBJECT|PUBLICATION|SUBSCRIPTION)(.*) OWNER TO .*;/m,
1446+
qr/^ALTER (?!EVENT TRIGGER|LARGE OBJECT|PUBLICATION|SUBSCRIPTION)(.*) OWNER TO .*;/m,
14471447
like => {}, # use more-specific options above
14481448
unlike => {
14491449
column_inserts => 1,

0 commit comments

Comments
 (0)