2012-04-27 4 views
3

레거시 시스템의 문제를 해결하고 더 빨리 잡히지 않은 것에 놀라움을 금치 못했습니다. Django 1.3을 실행하고이 응용 프로그램을 실행하는 데 9.1.3을 사용하고 있습니다. 이 시스템은 사용자가 시스템의 나머지 부분을 사용하기위한 검증 시스템입니다. 그것은 장고 사용자 인터페이스의 일부를 사용하지만 대부분 자신의 '사용자'입니다.Postgres 데이터베이스 오류 : 관계가 존재하지 않습니다.

웹 사이트의 암호를 잊어 버린 경우와 마찬가지로 사용자에게 계정 질문을 시도하면 문제가 발생합니다. 시도 할 때이 오류가 throw됩니다.

Database Error at admin/password/user 

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

이 오류의 원인은 누구입니까? 나는 db를 리셋하려고 시도했다. (아무것도하고 싶지는 않지만 단지 확신하고 싶었다.) 또한 phppgadmin을 사용하여 db를 샅샅이 뒤졌고, 그 외 모든 것이 올바르게 저장된다는 것을 발견했다. 사용자가 여러 개의 질문을 가질 수 있고 여러 사용자가 질문을 사용할 수 있도록 할당 할 때 ManyToMany 필드를 사용합니다.

+0

'설정 search_path의이 schema_where_is_your_object'합니까 당신을하는 데 도움이? –

답변

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

문자에 대해 2 바이트 이상을 사용할 수있는 데이터베이스 용 문자 인코딩을 사용하는 경우주의해야 할 점이 있습니다. 한계는 63 * 바이트 *로 훨씬 적은 * 문자 *로 적중 될 수 있습니다. Erwin은 분명히 한계를 정확하게 설명했지만 때로는 사람들이 문자를 셉니다. 문제가있는 곳을 이해하지 못하기 때문에 언급할만한 가치가 있다고 생각했습니다. – kgrittn

0

문제는 DB를 동기화하지 않은 것입니다. 이 명령을 실행하십시오 :

  1. python manage.py makemigrations myappname
  2. python manage.py migrate myappname
관련 문제