微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 1.2 PostgreSQL级联删除键,使用ON DELETE NO ACTION

我有一个大约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会根据您的需要将问题放在您的手中进行优化. (正如一个例子,它可能不值得在正常操作期间维护索引的成本,但值得在清除之前构建它并在之后丢弃它.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐