From a7c4897295c689f7ac99e6b9784afca5048e86fc Mon Sep 17 00:00:00 2001 From: wangfeihuo Date: Fri, 11 Oct 2024 11:51:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dgs=5Fdump=E5=B8=A6-c=20-t?= =?UTF-8?q?=E6=97=B6=E8=A7=A6=E5=8F=91=E5=99=A8=E4=B8=A2=E5=A4=B1=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/pg_dump/pg_dump.cpp | 2 +- .../regress/input/dump_with_trigger.source | 38 +++++++++++++ .../regress/output/dump_with_trigger.source | 56 +++++++++++++++++++ src/test/regress/parallel_schedule0A | 2 +- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 src/test/regress/input/dump_with_trigger.source create mode 100644 src/test/regress/output/dump_with_trigger.source diff --git a/src/bin/pg_dump/pg_dump.cpp b/src/bin/pg_dump/pg_dump.cpp index 07849e0fc..7b661912b 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 8d4c870ad..e33b0af25 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