7

私はこのmodels.pyを持っています

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.
4

2 に答える 2

2

コードは一見問題ないように見えます。データベース関連の問題だと思います。

提供されるmax_lengthsはかなり大きいので、max_lengthsを255未満に減らすか、のTextField代わりにを使用してみてくださいCharField

serviceこれに失敗した場合は、Serviceおよび/またはのフィールドの名前を変更してみてくださいServiceCheck

于 2013-01-19T09:21:07.253 に答える
1

あなたが直面している問題は、実際にはPostgres-XC / StormDB(または現在この問題を抱えているPostgres-XL)が異なるデータノード間のテーブルのパーティション分割を処理する方法に関連しています。

基本的に、問題は、データベースエンジンが外部キーまたは一意の制約に対する制約を保証できないことです。以前のバージョンのDjangoとPostgres-XC/StormDBに関するStormDBサイトの古い記事loose_constraints=trueによると、データベースに設定することでこれを行うことができます。Djangoの最新バージョン(1.6以降)では、同等のものがdb_constraint=FalseDjangoのモデルフィールドドキュメント(十分な担当者がいないため直接リンクできません)に従ってForeignKeyに設定されているようです。

パフォーマンスではなく可用性を重視する場合の別の解決策は、データを複製することです。これは、すべてのデータノードが同じデータを持っているため、問題が発生しないことを意味します。Djangoでこれを直接行う方法はわかりませんが、 CREATE TABLEのドキュメントDISTRIBUTE BY REPLICATIONで詳しく説明されているように、テーブルの作成を変更して使用できます。

于 2015-01-16T04:55:20.170 に答える