使用干净数据重置特定表

时间:2016-08-09 16:38:43

标签: sql postgresql psql

我正在进行测试,每次运行时都会更新我的数据库

我无法再次使用更新后的值进行测试

我正在使用:

重新创建WHOLE数据库
postgres=# drop database mydb;
DROP DATABASE
postgres=# CREATE DATABASE mydb WITH TEMPLATE mycleandb;
CREATE DATABASE

这需要一段时间

有什么方法可以更新我用mycleandb中的表更改的表吗?

2 个答案:

答案 0 :(得分:1)

交易

您尚未提及您的编程语言或框架。他们中的许多人已经内置了测试机制来处理这类事情。如果您没有使用其中一个,那么您可以做的是在每个测试设置中启动一个事务。当你拆掉测试时再将它翻回来。<​​/ p>

BEGIN;
 ...
 INSERT ...
 SELECT ...
 DELETE ...
ROLLBACK;

回滚,正如其名称所暗示的那样,反转了对数据库所做的所有操作,使其保持原始状态。

这种方法存在一个小问题,您不能在有意输入错误值并导致查询失败完整性测试的情况下进行集成测试。如果这样做,事务结束,并且在回滚之前不能执行任何新语句。

的pg_dump / pg_restore的

可以使用pg_dump的-t选项转储然后恢复一个或几个表。当交易不实际时,这可能是下一个最佳选择。

非耐用设置/ Ramdisk

如果以上两个选项都不适用,请参阅以下答案:https://stackoverflow.com/a/37221418/267540

这是关于django测试的问题,但是那里的django特定内容非常少。然而巧合的是,django相当优秀的测试框架依赖于上面描述的开始/更新/回滚机制。

答案 1 :(得分:1)

测试inside a transaction

begin;
update t
set a = 1;

检查结果,然后:

rollback;

它会回到干净的状态;