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”时间戳(时区非空);犯罪