PostgreSQL利用"do ..." 命令的测试数据做成/恢复脚本

平时在测试某个模块的几个画面时,要是没有把一整套测试数据整理好,

就容易反复出现在测试数据恢复上花很多时间的情况。

为此,这里总结了一下,利用"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;
原文地址:https://www.cnblogs.com/soulxj/p/13812824.html