gpt4 book ai didi

sql - 使用干净的数据重置特定表

转载 作者:行者123 更新时间:2023-11-29 12:57:44 25 4
gpt4 key购买 nike

我正在做一个测试,每次运行它都会更新我的数据库

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

我正在重新创建整个数据库:

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

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

这是关于 Django 测试的问题,但关于 Django 的内容很少。然而巧合的是,django 相当优秀的测试框架默认依赖于上述的 begin/update/rollback 机制。

关于sql - 使用干净的数据重置特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com