models.py에서 model의 field 수정 후 개발서버에서 migrate 시 발생한 문제 해결 과정 기술
로컬개발 서버환경에서 model의 field 수정 후 migrate 완료 후 커밋
개발서버에 반영하기 위해 커밋을 pull
개발서버 변경 된 models.py migrate
There is no unique constraint matching given keys for referenced table "checking_member"
checking_member에서 외래키로 참조하는 model의 field unique constraint 해당하지 않는다는 것.
이를 해결하기 위해서는 두 가지 방법이 있음(참고)
미안하지만 이미 models.py를 확인하면 외래키로 사용되는 name field는 unique=True가 지정되었고 로컬개발환경에서는 makemigrations와 migrate가 문제 없이 실행 됨.
PostgreSQL 컨테이너에 접속해서 직접 unique constraint를 적용하기로 함
sudo docker-compose exec db psql -U poko_db_user poko_db_dev
ALTER TABLE checking_member ADD CONSTRAINT unique_name UNIQUE ("name");
ALTER TABLE
ADD CONSTRAINT unique_name
UNIQUE
고유(unique) 제약 조건은 데이터베이스에서 특정 열(또는 여러 열의 조합)의 값이 고유하도록 강제하는 규칙
외래키로 참조되는 필드는 반드시 Unique Constraint가 적용되어야 한다.
외래키 참조하는 모델의 데이터를 외래키를 통해 식별 하기 때문에.
Table "public.checking_member"
Column | Type | Collation | Nullable | Default
------------+------------------------+-----------+----------+----------------------------------
id | bigint | | not null | generated by default as identity
name | character varying(5) | | not null |
attendance | integer | | not null |
absent | integer | | not null |
teacher_id | character varying(150) | | not null |
gender | character varying(3) | | |
grade | character varying(3) | | |
Indexes:
"checking_member_pkey" PRIMARY KEY, btree (id)
"unique_name" UNIQUE CONSTRAINT, btree (name)
"checking_member_teacher_id_7bd61e52" btree (teacher_id)
Foreign-key constraints:
"checking_member_teacher_id_7bd61e52_fk_auth_user_username" FOREIGN KEY (teacher_id) REFERENCES auth
_user(username) DEFERRABLE INITIALLY DEFERRED