2017-05-18 16 views
1

나는 down 함수를 마이그레이션 파일에 쓰는 방법에 대해 궁금해했다. 이상적으로는 정확히 up 메소드에서 수행하는 것과 정반대가되어야합니다. 이제 up 함수를 작성하여 열에 unique 제약 조건을 삭제하고 중복 된 데이터가있는 새 행을 추가 한 다음 마이그레이션을 롤백하고 싶습니다. 이상적으로는, 컬럼에 고유 제한 조건을 다시 추가하려면 down 메소드를 쓰지 만 테이블에는 현재 중복 데이터가 포함되어 있으므로 마이그레이션은 롤백되지 않습니다. 내 질문이 -마이그레이션 파일 (knex.js)에 함수를 기록하는 방법

  • 이런 상황에서해야 할 일은 무엇입니까?
  • down을 마이그레이션하는 방법은 무엇입니까?
  • 그런 상황에서 down 기능을 비워 둘 수 있습니까?

감사합니다.

+0

'위로'에 데이터를 삽입하면 안됩니다. 데이터 삽입은'seeding'과 관련이 있습니다. –

+0

@FazalRasel 그는 행을 추가하는 것이 마이그레이션 파일의 일부라고 말한 적이 없으며 때로는 그렇게하는 것이 완벽합니다. 시드 파일은 일] 적으로 실행되는 태스크의] ​​복 태스크 W 이주를 위해 일] 적으로 사용됩니다. –

+0

@FazalRasel 예, Mikael이 말했듯이, 나는'up'에 어떤 데이터도 삽입하지 않았습니다. –

답변

1

저는 대개 함수를 적어 두지 않고 단지 비워 둡니다.

마이그레이션을 롤백 한 적이 없으며 이전 DB 상태로 되돌리려면 백업에서 전체 DB 만 복원하면됩니다.

고유 제한 조건을 되돌리려면, 중복 행을 수정 한 후 고유 제한 조건을 다시 추가하는 또 다른 위로 마이그레이션을 작성합니다.

많은 사람들이 DB를 다시 설정하기 위해 테스트간에 롤백을 사용하고 있지만 그 방법은 실제로 느린 방법이라는 것을 알고 있습니다.

+0

당신이 말했듯이 _fixes duplicates_와 다른 마이그레이션을 작성할 것입니다. 마이그레이션에서 복제본을 어떻게 수정하겠습니까? 이전 데이터에 대해 '소프트 삭제'를 수행하고 고유 제약 조건을 추가하는 것과 함께 데이터베이스에 보관하고 싶다면 어떻게해야합니까? –

+0

@HarshalGangurde 당신에게 가장 적합한 방법을 선택할 수 있습니다. 완전한 고유 인덱스 대신 부분적으로 고유 한 인덱스를 만들 수 있습니다.이 인덱스는 소프트 삭제 된 행만 무시합니다 (보관 된 행에 대해이 작업을 수행함). 다른 방법은 소프트 삭제 된 데이터를 다른 테이블로 옮기거나 제약이 실패하지 않는 방식으로 소프트 삭제 된 행 내부의 데이터를 변경하는 것입니다. 응용 프로그램에 따라 정답이 없습니다. –