diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index b9d063aa22..f461692d45 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -3313,6 +3313,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, "PUBLICATION") == 0 || @@ -3359,7 +3360,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); } @@ -3518,6 +3519,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 || @@ -3556,7 +3558,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 502d5eb7af..8e9454885a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -16844,6 +16844,7 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo) { DumpOptions *dopt = fout->dopt; PQExpBuffer query; + PQExpBuffer delqry; PQExpBuffer labelq; /* Skip if not to be dumped */ @@ -16851,6 +16852,7 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo) return; query = createPQExpBuffer(); + delqry = createPQExpBuffer(); labelq = createPQExpBuffer(); appendPQExpBufferStr(query, "CREATE EVENT TRIGGER "); @@ -16890,14 +16892,21 @@ 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)); if (evtinfo->dobj.dump & DUMP_COMPONENT_DEFINITION) 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); if (evtinfo->dobj.dump & DUMP_COMPONENT_COMMENT) dumpComment(fout, labelq->data, @@ -16905,6 +16914,7 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo) evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId); destroyPQExpBuffer(query); + destroyPQExpBuffer(delqry); destroyPQExpBuffer(labelq); } diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index a8000db336..4c6201be61 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -466,7 +466,7 @@ my %tests = ( 'ALTER COLLATION test0 OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER COLLATION test0 OWNER TO .*;/m, collation => 1, like => { @@ -493,7 +493,7 @@ my %tests = ( 'ALTER FOREIGN DATA WRAPPER dummy OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER FOREIGN DATA WRAPPER dummy OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -520,7 +520,7 @@ my %tests = ( 'ALTER SERVER s1 OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER SERVER s1 OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -547,7 +547,7 @@ my %tests = ( 'ALTER FUNCTION dump_test.pltestlang_call_handler() OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ \QALTER FUNCTION dump_test.pltestlang_call_handler() \E \QOWNER TO \E @@ -576,7 +576,7 @@ my %tests = ( 'ALTER OPERATOR FAMILY dump_test.op_family OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ \QALTER OPERATOR FAMILY dump_test.op_family USING btree \E \QOWNER TO \E @@ -655,7 +655,7 @@ my %tests = ( 'ALTER OPERATOR CLASS dump_test.op_class OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ \QALTER OPERATOR CLASS dump_test.op_class USING btree \E \QOWNER TO \E @@ -746,7 +746,7 @@ my %tests = ( 'ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -772,7 +772,7 @@ my %tests = ( 'ALTER SCHEMA dump_test OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER SCHEMA dump_test OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -798,7 +798,7 @@ my %tests = ( 'ALTER SCHEMA dump_test_second_schema OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER SCHEMA dump_test_second_schema OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1193,7 +1193,7 @@ my %tests = ( 'ALTER TABLE test_table OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TABLE test_table OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1251,7 +1251,7 @@ my %tests = ( 'ALTER TABLE test_second_table OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TABLE test_second_table OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1278,7 +1278,7 @@ my %tests = ( 'ALTER TABLE test_third_table OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TABLE test_third_table OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1305,7 +1305,7 @@ my %tests = ( 'ALTER TABLE measurement OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TABLE measurement OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1332,7 +1332,7 @@ my %tests = ( 'ALTER TABLE measurement_y2006m2 OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TABLE measurement_y2006m2 OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1359,7 +1359,7 @@ my %tests = ( 'ALTER FOREIGN TABLE foreign_table OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER FOREIGN TABLE foreign_table OWNER TO .*;/m, like => { binary_upgrade => 1, @@ -1386,7 +1386,7 @@ my %tests = ( 'ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 OWNER TO .*;/m, like => { @@ -1414,7 +1414,7 @@ my %tests = ( 'ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 OWNER TO' => { all_runs => 1, catch_all => - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)', + 'ALTER ... OWNER commands (except post-data objects)', regexp => qr/^ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 OWNER TO .*;/m, like => { @@ -1439,11 +1439,11 @@ my %tests = ( only_dump_test_table => 1, role => 1, }, }, - # catch-all for ALTER ... OWNER (except LARGE OBJECTs and PUBLICATIONs) - 'ALTER ... OWNER commands (except LARGE OBJECTs and PUBLICATIONs)' => { + # catch-all for ALTER ... OWNER (except post-data objects) + 'ALTER ... OWNER commands (except post-data objects)' => { all_runs => 0, # catch-all regexp => -qr/^ALTER (?!LARGE OBJECT|PUBLICATION|SUBSCRIPTION)(.*) OWNER TO .*;/m, +qr/^ALTER (?!EVENT TRIGGER|LARGE OBJECT|PUBLICATION|SUBSCRIPTION)(.*) OWNER TO .*;/m, like => {}, # use more-specific options above unlike => { column_inserts => 1,