使用干净的数据重置特定表
Reset specific tables with clean data
我正在做一个测试,每次 运行 它都会更新我的数据库
而且我无法使用更新后的值再次进行测试
我正在重新创建整个数据库:
postgres=# drop database mydb;
DROP DATABASE
postgres=# CREATE DATABASE mydb WITH TEMPLATE mycleandb;
CREATE DATABASE
这需要一段时间
有什么方法可以只更新我用 mycleandb 中的表更改的表吗?
交易
你没有提到你的编程语言或框架是什么。他们中的许多人都内置了处理此类事情的测试机制。如果您不使用其中之一,您可以做的是为每个测试设置启动一个事务。然后在你拆掉测试的时候回滚。
BEGIN;
...
INSERT ...
SELECT ...
DELETE ...
ROLLBACK;
回滚,顾名思义,反转对数据库所做的所有操作,使其保持原始状态。
不过,这种方法有一个小问题,您无法在故意输入不正确的值并导致查询无法通过完整性测试的情况下进行集成测试。如果你这样做,事务结束并且在回滚之前不能执行新的语句。
pg_dump/pg_restore
可以使用 pg_dump 的 -t 选项转储然后恢复一个或几个表。当交易不可行时,这可能是下一个最佳选择。
非耐用设置/Ramdisk
如果以上两个选项都不适用请看这个答案:
这是关于 Django 测试的问题,但关于 Django 的内容很少。然而巧合的是,django 相当优秀的测试框架默认依赖于上述 begin/update/rollback 机制。
begin;
update t
set a = 1;
检查结果然后:
rollback;
它会恢复到干净的状态;
我正在做一个测试,每次 运行 它都会更新我的数据库
而且我无法使用更新后的值再次进行测试
我正在重新创建整个数据库:
postgres=# drop database mydb;
DROP DATABASE
postgres=# CREATE DATABASE mydb WITH TEMPLATE mycleandb;
CREATE DATABASE
这需要一段时间
有什么方法可以只更新我用 mycleandb 中的表更改的表吗?
交易
你没有提到你的编程语言或框架是什么。他们中的许多人都内置了处理此类事情的测试机制。如果您不使用其中之一,您可以做的是为每个测试设置启动一个事务。然后在你拆掉测试的时候回滚。
BEGIN;
...
INSERT ...
SELECT ...
DELETE ...
ROLLBACK;
回滚,顾名思义,反转对数据库所做的所有操作,使其保持原始状态。
不过,这种方法有一个小问题,您无法在故意输入不正确的值并导致查询无法通过完整性测试的情况下进行集成测试。如果你这样做,事务结束并且在回滚之前不能执行新的语句。
pg_dump/pg_restore
可以使用 pg_dump 的 -t 选项转储然后恢复一个或几个表。当交易不可行时,这可能是下一个最佳选择。
非耐用设置/Ramdisk
如果以上两个选项都不适用请看这个答案:
这是关于 Django 测试的问题,但关于 Django 的内容很少。然而巧合的是,django 相当优秀的测试框架默认依赖于上述 begin/update/rollback 机制。
begin;
update t
set a = 1;
检查结果然后:
rollback;
它会恢复到干净的状态;