Python Django postgresql外键

Python Django postgresql外键,python,django,postgresql,foreign-keys,Python,Django,Postgresql,Foreign Keys,我有这个模型 from django.db import models from django.contrib.auth.models import User class Service(models.Model): user = models.ForeignKey(User) name = models.CharField(max_length=800, blank=False) service = models.CharField(max_length=2000,

我有这个模型

from django.db import models
from django.contrib.auth.models import User

class Service(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=800, blank=False)
    service = models.CharField(max_length=2000, blank=False)
    def __unicode__(self):
        return self.name

class ServiceCheck(models.Model):
    service = models.ForeignKey(Service)
    check_status = models.CharField(max_length=80)
    check_time = models.DateTimeField()
当我对postgresql运行syncdb时,结果是错误:

~/dev-md> sudo python manage.py syncdb
Creating tables ...
Creating table monitor_service
Creating table monitor_servicecheck

DatabaseError: Hash/Modulo distribution column does not refer to hash/modulo distribution column in referenced table.
代码乍一看很好。我怀疑这是一个与数据库相关的问题


由于提供的
max_length
s非常庞大,请尝试将
max_length
s缩减为您遇到的问题实际上与Postgres XC/StormDB(或者现在我遇到的Postgres XL)如何处理不同数据节点之间的表分区有关

基本上,问题在于数据库引擎不能保证外键或唯一约束的约束。根据StormDB站点上关于Django和Postgres XC/StormDB早期版本的旧版本,您可以通过在数据库上设置
loose_constraints=true
来实现这一点。在Django的现代版本(1.6或更高版本)中,等效项似乎是根据Django的模型字段文档(由于没有足够的rep,我无法直接链接到该文档)在外键上设置
db_constraint=False

如果您更关心可用性而不是性能,另一个解决方案是复制数据,这意味着您不会有问题,因为所有数据节点都有相同的数据。
我不知道在Django中直接执行此操作的任何方法,但您可以修改表创建以使用文档中详细说明的
复制分发。

您确定在models.py文件中按此顺序定义了Service和ServiceCheck吗?我这样问是因为您的输出应该显示monitor_服务表是首先创建的。是的,Talvalin顺序正确。是否还有其他应用程序?这段代码应该可以运行。正在运行的SQL是什么样子的?您可以通过运行
python manage.py sqlall monitor
BEGIN来查看这一点;创建表“monitor_service”(“id”串行非空主键,“user_id”整数非空引用“auth_user”(“id”)可延迟初始延迟,“name”varchar(800)非空,“service”varchar(2000)非空);创建表“monitor_servicecheck”(“id”串行非空主键,“service_id”整数非空引用“monitor_service”(“id”)可延迟初始延迟,“check_status”varchar(80)非空,“check_time”时间戳(时区非空);犯罪