2012-04-27 17 views
3

私はレガシーシステムのいくつかの問題を修正し、私が驚いていた障害に遭遇しました。私はDjango 1.3を実行しており、このアプリケーションを実行する際にはpostgres 9.1.3を使用しています。このシステムは、ユーザが残りのシステムを使用するための検証システムです。これはDjangoユーザーインターフェイスの一部を使用しますが、ほとんどの場合、それは独自の「ユーザー」です。Postgresデータベースエラー:関係は存在しません

私の問題は、ユーザーにアカウントの質問を(ウェブサイトへのパスワードを忘れた場合と同様に)試してみるときます。私は、このエラーをスローします:

Database Error at admin/password/user 

relation "password_user_answered_questions_id_s" does not exist 
LINE 1: SELECT CURRVAL('"password_user_quest... 
      ^

このエラーが発生する可能性があるのは誰ですか?私は、データベースをリセットしようとしましたが(何もするつもりはないと思っていただけです)、phppgadminを使用してdbを覗き込んで、これ以外のものが正しく保存されていることがわかりました。ユーザーが複数の質問を持ち、複数のユーザーが質問を使用できるように割り当てるときは、ManyToManyフィールドを使用しています。

+0

はschema_where_is_your_object'するために 'セットのsearch_pathはあなたを助けていますか? –

答えて

2

理由は、単にエラーメッセージのような

relation "password_user_answered_questions_id_s" does not exist

が私たちに知らせることが最も可能性が高いです。 PostgreSQL handles identifiersのことをご存知ですか?

また、配列は、通常、* _seqと命名される。最後から手紙が欠けている?識別子の


について最大長 - 私は、上記のリンクからマニュアルを引用:

The system uses no more than NAMEDATALEN-1 bytes of an identifier; longer names can be written in commands, but they will be truncated. By default, NAMEDATALEN is 64 so the maximum identifier length is 63 bytes. If this limit is problematic, it can be raised by changing the NAMEDATALEN constant in src/include/pg_config_manual.h.

太字強調鉱山。あなたの識別子を少し短くしなければならないようです。

+0

それは自動的に生成されるので、* _seqが何らかの理由で欠落していると仮定していますが、なぜそれがカットされたのかは分かりません。私は実際の名前を使用したくないのでここで実際のフィールドをトリムする必要がありましたが、長さには限界がありますか? – CF711

+0

@ CF711:それはおそらくそれです。私は私の答えに少し追加しました。 –

+3

文字に1バイト以上使用できる文字エンコーディングを使用している場合は注意が必要です。上限は63 *バイト*です。これははるかに少ない*文字で打つことができます*。アーウィンは確かにその限界を正確に述べましたが、時には人が文字を数えて問題のどこにあるのか分からないことがあるので、言及する価値があると思いました。 – kgrittn

0

問題はDBを同期していないことです。これらのコマンドを実行してください:

  1. python manage.py makemigrations myappname
  2. python manage.py migrate myappname
関連する問題