平时在测试某个模块的几个画面时,要是没有把一整套测试数据整理好,
就容易反复出现在测试数据恢复上花很多时间的情况。
为此,这里总结了一下,利用"do ..." 命令执行数据回滚的代码段,简单易用。
以下SQL文,可以放在一个Main.sql中,主要是用来对比测试前后数据的变化。
--首先查询测试前各业务表的数据,以备比较 SELECT * FROM src_table WHERE 1 = 1 AND p_key_1 = 'hahaha' AND p_key_2 >= 1 AND p_key_2 <= 99 ; --根据原表的数据,做成存放测试数据的临时表 --此处可根据业务需要批量做成多张表 CREATE TABLE test_data_table AS SELECT * FROM src_table WHERE 1 = 1 AND p_key_1 = 'hahaha' AND p_key_2 >= 1 AND p_key_2 <= 99 ; --然后在实际业务程序、画面上进行测试 --最后查询测试后结业务表的数据,看看结果是否符合预期 SELECT * FROM src_table WHERE 1 = 1 AND p_key_1 = 'hahaha' AND p_key_2 >= 1 AND p_key_2 <= 99 ;
如果,数据不符合预期,那就利用以下SQL文进行测试数据恢复或者测试数据重制
以下可以放在RollBack.sql中,可根据业务需要批量做成多张表。
DO $$ DECLARE --true:测试数据恢复; false:测试数据重制 test_to_src boolean := true; --此处可根据需要定义多批测试数据主KEY --case1 data_p_key_1 varchar := 'hahaha'; data_p_key_2_fr int := 0; data_p_key_2_to int := 99; --case2 -- data_p_key_1 varchar := 'heiheihei'; -- -- data_p_key_2_fr int := 100; -- data_p_key_2_to int := 199; BEGIN IF test_to_src THEN --delete src_table DELETE FROM src_table WHERE 1 = 1 AND p_key_1 = data_p_key_1 AND p_key_2 >= data_p_key_2_fr AND p_key_2 <= data_p_key_2_to ; --insert into src_table INSERT INTO src_table SELECT * FROM test_data_table WHERE 1 = 1 AND p_key_1 = data_p_key_1 AND p_key_2 >= data_p_key_2_fr AND p_key_2 <= data_p_key_2_to ; ELSE --delete test_data_table DELETE FROM test_data_table WHERE 1 = 1 AND p_key_1 = data_p_key_1 AND p_key_2 >= data_p_key_2_fr AND p_key_2 <= data_p_key_2_to; --insert into test_data_table INSERT INTO test_data_table SELECT * FROM src_table WHERE 1 = 1 AND p_key_1 = data_p_key_1 AND p_key_2 >= data_p_key_2_fr AND p_key_2 <= data_p_key_2_to; END IF; END ; $$ LANGUAGE plpgsql;