2012-04-27 322 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在數據庫中周圍發現,並發現其他一切都得到正確存儲,除了這一個。它在分配時使用ManyToMany字段,以便用戶可以有多個問題並且可以由多個用戶使用問題。

+0

做了'設置SEARCH_PATH TO schema_where_is_your_object'幫助你? – 2012-04-27 19:14:39

回答

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 2012-04-27 17:11:42

+0

@ CF711:可能就是這樣。我在答案中加了一點。 – 2012-04-27 17:14:41

+3

如果您的數據庫使用字符編碼,並且字符可以使用多個字節,那麼您應該注意一點 - 限制爲63 *字節*,您可以使用少得多的字符*進行打擊。 Erwin當然正確地說明了這個限制,但是有時候人們只是數字而不明白問題出在哪裏,所以我覺得值得一提。 – kgrittn 2012-04-28 01:41:29

0

問題是你沒有同步你的數據庫,我猜。請執行以下命令:

  1. python manage.py makemigrations myappname
  2. python manage.py migrate myappname
相關問題