diff --git a/src/bin/pg_dump/pg_dump.cpp b/src/bin/pg_dump/pg_dump.cpp index f4f83f1e4..1f7c23f7d 100644 --- a/src/bin/pg_dump/pg_dump.cpp +++ b/src/bin/pg_dump/pg_dump.cpp @@ -11334,7 +11334,7 @@ static void dumpDumpableObject(Archive* fout, DumpableObject* dobj) break; case DO_TRIGGER: { /* -t condition will not dump trigger without trigger function. */ - if (gTableCount == 0) + if (gTableCount == 0 || outputClean) dumpTrigger(fout, (TriggerInfo*)dobj); break; } diff --git a/src/test/regress/input/dump_with_trigger.source b/src/test/regress/input/dump_with_trigger.source new file mode 100644 index 000000000..dd669e843 --- /dev/null +++ b/src/test/regress/input/dump_with_trigger.source @@ -0,0 +1,38 @@ +create database dump_with_trigger; +\c dump_with_trigger + +CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT); +CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); + +CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS + $$ + DECLARE + BEGIN + INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); + RETURN NEW; + END + $$ LANGUAGE PLPGSQL; + +CREATE TRIGGER insert_trigger + BEFORE INSERT ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_insert_func(); + + +\! @abs_bindir@/gs_dump dump_with_trigger -p @portstring@ -f @abs_bindir@/dump_with_trigger.sql -w -c -t test_trigger_src_tbl >/dev/null 2>&1; echo $? +drop table test_trigger_src_tbl; +\! @abs_bindir@/gsql -ddump_with_trigger -p @portstring@ -f "@abs_bindir@/dump_with_trigger.sql"; + +-- dump_with_trigger check + +SELECT tgname AS trigger_name, + tgisinternal AS internal, + tgtype::varchar AS trigger_type, + tgrelid::regclass AS table_name, + tgfoid::regproc AS function_name, + tgattr AS trigger_columns, + tgqual AS qualifier +FROM pg_trigger order by 1; + +\c postgres +drop database dump_with_trigger; diff --git a/src/test/regress/output/dump_with_trigger.source b/src/test/regress/output/dump_with_trigger.source new file mode 100644 index 000000000..eff3328b6 --- /dev/null +++ b/src/test/regress/output/dump_with_trigger.source @@ -0,0 +1,56 @@ +create database dump_with_trigger; +\c dump_with_trigger +CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT); +CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); +CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS + $$ + DECLARE + BEGIN + INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); + RETURN NEW; + END + $$ LANGUAGE PLPGSQL; +CREATE TRIGGER insert_trigger + BEFORE INSERT ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_insert_func(); +\! @abs_bindir@/gs_dump dump_with_trigger -p @portstring@ -f @abs_bindir@/dump_with_trigger.sql -w -c -t test_trigger_src_tbl >/dev/null 2>&1; echo $? +0 +drop table test_trigger_src_tbl; +\! @abs_bindir@/gsql -ddump_with_trigger -p @portstring@ -f "@abs_bindir@/dump_with_trigger.sql"; +SET +SET +SET +SET +SET +SET +SET +SET +SET +--?.* +DROP TABLE +SET +SET +SET +SET +SET +CREATE TABLE +ALTER TABLE +CREATE TRIGGER +--?.* +-- dump_with_trigger check +SELECT tgname AS trigger_name, + tgisinternal AS internal, + tgtype::varchar AS trigger_type, + tgrelid::regclass AS table_name, + tgfoid::regproc AS function_name, + tgattr AS trigger_columns, + tgqual AS qualifier +FROM pg_trigger order by 1; + trigger_name | internal | trigger_type | table_name | function_name | trigger_columns | qualifier +----------------+----------+--------------+----------------------+-----------------+-----------------+----------- + insert_trigger | f | 7 | test_trigger_src_tbl | tri_insert_func | | +(1 row) + +\c postgres +drop database dump_with_trigger; diff --git a/src/test/regress/parallel_schedule0A b/src/test/regress/parallel_schedule0A index bdfeb8060..73c26a174 100644 --- a/src/test/regress/parallel_schedule0A +++ b/src/test/regress/parallel_schedule0A @@ -63,7 +63,7 @@ test: set_transaction_test test: select_into_user_defined_variables test: select_into_file -test: gs_dump_package trigger_dump gs_dump_synonym dump_trigger_definer +test: gs_dump_package trigger_dump gs_dump_synonym dump_trigger_definer dump_with_trigger test: out_param_func out_param_func_overload #test: sqlcode_cursor test: gs_dump_tableconstraint