2017-02-23 1 views
6

나는 alembic을 사용하는 팀에서 db 마이그레이션을 관리하고 있습니다. 나는 최근에 주인을 끌어와 alembic upgrade heads을 실행하려고했습니다. 나는 다음 메시지를 얻었다. 내가 alembic downgrade -1을 실행하려고 할 때 alembic의 "요청 된 수정본 겹치기와 다른 요청 된 수정본"을 어떻게 수정합니까?

INFO [alembic.runtime.migration] Context impl PostgresqlImpl. 
INFO [alembic.runtime.migration] Will assume transactional DDL. 
ERROR [alembic.util.messaging] Requested revision a04c53fd8c74 overlaps with other requested revisions 453d88f67d34 
    FAILED: Requested revision a04c53fd8c74 overlaps with other requested revisions 453d88f67d34 

나는 같은 메시지를 받았습니다. Running alembic history이이를 인쇄합니다.

453d88f67d34 -> a04c53fd8c74 (label_1, label_2) (head), Create such and such tables. 
2f15c778e709, 9NZSZX -> 453d88f67d34 (label_1, label_2) (mergepoint), empty message 
b1861bb8b23f, b8aa3acdf260 -> 2f15c778e709 (label_1, label_2) (mergepoint), Merge heads b18 and b8a 
(...many more old revisions) 

내게는 완벽하게 훌륭한 기록처럼 보입니다. alembic heads보고 a04c53fd8c74 (label_1, label_2) (head).

나에게 이상한 유일한 점은 내 alembic 버전 db에는 두 개의 값이 있다는 것입니다. 나는 예외를 인터넷 검색에서 찾을 수 있습니다

my_postgres=# SELECT * FROM alembic_version; 
version_num 
-------------- 
a04c53fd8c74 
453d88f67d34 
(2 rows) 

유일한 기준은 차라리 통해 읽을하려는 source code입니다.

어떻게 이런 상황이 발생할 수 있습니까? 어떻게 수정해야합니까? "중첩"이란 무슨 뜻입니까?

답변

6

데이터베이스의 이전 버전 번호를 삭제하여 "고정"합니다.

my_postgres=# DELETE FROM alembic_version WHERE version_num = '453d88f67d34'; 
DELETE 1 
my_postgres=# SELECT * FROM alembic_version; 
version_num 
-------------- 
a04c53fd8c74 
(1 row) 

이제 업그레이드 및 다운 그레이드를 실행할 수 있습니다. 내 역사와 머리는 똑같아. 그러나 나는 아직도 그것이 일어난 이유를 알지 못한다. 또는 약간의 DB 상태가 미묘하게 어지럽 혀 있는지, 그래서 누군가가 더 좋은 대답을 가지고 있다면 게시해라!

0

데이터베이스를 처음으로 삭제하지 않고 이전 버전으로 복원하려고했기 때문에이를 발견 한 사람들에게도 마찬가지였습니다. 나는 당신의 alembic_version 테이블에 데이터베이스가 현재 있어야하는 버전이 version_num 인 행을 하나만 가져야한다고 생각합니다.

그래서 데이터베이스를 복원했는데 현재 버전 번호를 바꾸는 대신 먼저 데이터베이스를 삭제했을 때 새로운 행이 추가되었습니다. 이 문제를 해결하기 위해 필자는 alembic 테이블에서 잘못된 버전을 삭제해야했습니다 (데이터베이스의 버전 번호가 무엇이든 먼저 삭제해야 함). ... 알테어의 대답에 대해 좀 더 자세히 설명해 드리겠습니다.