!6512 修复gs_dump 带-c -t时导出导入表后触发器丢失的问题

Merge pull request !6512 from wangfeihuo/gs_dump
This commit is contained in:
opengauss_bot
2024-10-14 08:23:22 +00:00
committed by Gitee
4 changed files with 96 additions and 2 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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