Django 1.2 PostgreSQL级联删除键,使用ON DELETE NO ACTION
发布时间:2020-12-20 13:24:43 所属栏目:Python 来源:网络整理
导读:我有一个大约150个表的 postgresql数据库(这是一个Django 1.2项目). Django在创建表时向外键添加ON DELETE NO ACTION和ON UPDATE NO ACTION. 现在我需要根据特定条件从一堆表中批量删除数据(大约800,000条记录). 使用Model.objects.filter().delete()不是一
我有一个大约150个表的
postgresql数据库(这是一个Django 1.2项目). Django在创建表时向外键添加ON DELETE NO ACTION和ON UPDATE NO ACTION.
现在我需要根据特定条件从一堆表中批量删除数据(大约800,000条记录). 使用Model.objects.filter().delete()不是一个选项,因为数据很大,需要花费很多时间. 只有sanest选项似乎是级联删除,但由于Django添加了“ON DELETE NO ACTION”,它似乎是一个无选择. 所以我的问题是:有没有办法以简单的方式(有许多)或类似的东西将所有外键修改为ON DELETE CASCADE. (我知道我可以手动为每个表编写SQL查询,但这将是一个巨大且难以维护的任务.) 解决方法
正如包含安德鲁答案的链接所指出的那样,如果你在Django中将其设置为CASCADE,那么Django将去删除“零售”.如果将其设置为NO ACTION,则可以创建数据库级外键定义来处理事物.这对我来说听起来像是一个合理的计划.
确保在每个外键的引用列集上定义了索引;否则你会看到很慢的表现.当您定义外键时,某些数据库产品会自动创建这样的索引,但是在某些情况下这样做并不是有利的,因此PostgreSQL会根据您的需要将问题放在您的手中进行优化. (正如一个例子,它可能不值得在正常操作期间维护索引的成本,但值得在清除之前构建它并在之后丢弃它.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |