2017-02-23 22 views
6

Tôi làm việc trên một nhóm sử dụng alembic để quản lý di chuyển db. Gần đây tôi đã kéo tổng thể và cố gắng chạy alembic upgrade heads. Tôi nhận được thông báo sau;Làm cách nào để sửa "Yêu cầu sửa đổi trùng lặp với các bản sửa đổi được yêu cầu khác"?

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 

Tôi nhận được thông báo tương tự khi cố gắng chạy alembic downgrade -1. Chạy alembic history in bản này;

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) 

đối với tôi trông giống như một lịch sử hoàn toàn tốt đẹp. alembic heads báo cáo a04c53fd8c74 (label_1, label_2) (head).

Điều duy nhất có vẻ lạ với tôi là phiên bản alembic db của tôi có hai giá trị trong đó;

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

Tham chiếu duy nhất tôi có thể tìm thấy từ googling ngoại lệ là source code, mà tôi không muốn đọc qua.

Tình huống này có thể xảy ra như thế nào? Tôi nên sửa nó như thế nào? "Chồng chéo" nghĩa là gì?

Trả lời

6

Tôi "cố định" bằng cách xóa số phiên bản cũ hơn trong cơ sở dữ liệu;

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

Tôi hiện có thể chạy nâng cấp và hạ cấp. Lịch sử và đầu của tôi trông giống nhau. Nhưng tôi vẫn không biết tại sao nó lại xảy ra, hoặc liệu có một số trạng thái db bị rối tung lên một cách tinh tế, vì vậy nếu có ai có câu trả lời tốt hơn thì hãy đăng nó!

0

Đối với những người tìm thấy điều này, điều này đã xảy ra với tôi cũng bởi vì tôi đã cố gắng khôi phục cơ sở dữ liệu của mình sang phiên bản cũ hơn mà không phải bỏ nó trước. Tôi tin rằng bạn chỉ nên có một hàng trong bảng alembic_version của mình với version_num của bất kỳ phiên bản nào mà cơ sở dữ liệu của bạn hiện có.

Vì vậy, khi tôi khôi phục cơ sở dữ liệu của tôi và không thả nó trước, thay vì thay thế số phiên bản hiện tại, nó đã thêm một hàng mới. Để sửa chữa nó, tôi đã phải xóa phiên bản không chính xác từ bảng alembic của tôi (bất kể số phiên bản của cơ sở dữ liệu mà tôi nên đã giảm đầu tiên). ... chỉ để thêm một chút ngữ cảnh cho câu trả lời của Altair.

Các vấn đề liên quan