每次触发单元测试时,我都需要从所有表中删除所有数据。现在,我对测试套件中包含的每个表都使用了TRUNCATE TABLE "table_name" CASCADE
。
问题是这些查询花费了很多时间--大约9-11秒!
我希望能够仅用TRUNCATE
语句替换这些TRUNCATE...CASCADE
,但要做到这一点,我需要一个按主-详细(父-子)关系(子优先)排序的表列表。我可以手动创建一到两次这样的列表,但是数据库每天都在变化。有没有办法按这个顺序生成表的列表?
我使用的是Postgresql。
发布于 2013-04-11 20:57:23
我解决这个问题的方式如下所示:
然而,这可能是过度杀伤力。只有两个函数可能会更容易:
EXECUTE $e$ ALTER TABLE $e$ || quote_ident(relname) || $e$ disable trigger all $e$;
EXECUTE $e$ ALTER TABLE $e$ || quote_ident(relname) || $e$ enable trigger all $e$;
在清除过程开始时调用函数1。在提交之前调用函数2。
https://stackoverflow.com/questions/12838421
复制相似问题