구버전 데이터베이스를 최신 버전으로 가져오기

답변해 주셔서 감사합니다. 하지만 단순히 투표(polls)를 제거하는 것은 중복된 레코드에 대한 해결책이 아닙니다. phpbb3에서 가져오는 초기 단계에서 오류가 발생해 이러한 레코드들이 생성되었을 것으로 추정됩니다. 해당 레코드들은 유효하며, 단순히 원래 가져오기 과정에서 이를 확인하지 않아 UUID가 중복된 것입니다.

어쨌든, 이 문제를 마주하는 분들을 위한 해결 방법은 다음과 같습니다:

  1. post_custom_fields 테이블에서 문제 있는 레코드를 변경하여 임시로 다른 이름으로 옮깁니다. 재빌드 후 몇 분을 기다렸다가 또 다른 오류를 확인하는 것보다 이렇게 하는 것이 좋습니다.

update post_custom_fields set name = 'polls' where name = 'polls_bak';
update post_custom_fields set name = 'polls-votes' where name = 'polls-votes_bak';

  1. 재빌드 앱 실행, 업데이트 또는 사용자가 하려는 작업을 수행합니다.

  2. 모든 빌드와 시작이 완료된 후 실행 중인 컨테이너에 연결합니다.

  3. 투표(polls) 이름을 원래대로 변경합니다:

update post_custom_fields set name = 'polls'_bak' where name = 'polls';
update post_custom_fields set name = 'polls-votes_bak'' where name = 'polls-votes';

  1. 앱 컨테이너 내부에서 문제가 되는 마이그레이션을 수동으로 실행합니다. 여기서 VERSION은 마이그레이션 파일 이름에 포함된 숫자입니다.

우선 마이그레이션을 되돌립니다. down 메서드가 데이터베이스에 아무것도 수행하지 않으므로 이 작업은 아무 효과가 없습니다:

rake db:migrate:down VERSION=20180820080623

마이그레이션을 실행하고 첫 번째 오류를 확인합니다:

rake db:migrate:up VERSION=20180820080623

  1. 문제의 UUID를 찾기 위해 데이터베이스 GUI를 사용하여 테이블을 검색합니다(편집이 더 쉽습니다):

select from post_custom_fields where value like '%your_UUID%';

  1. 이제 어려운 부분입니다. UUID는 투표 답변/옵션의 식별자이므로, poll 행의 UUID를 변경해야 합니다. 예를 들어 731ef6901e968fc3f4e785fcb9e9abe8에서 731ef6901e968fc3f4e785fcb9e9abe9로 변경하는 것입니다. 시스템에서 이와 같은 UUID를 다시 찾을 가능성은 매우 낮습니다. 하지만 이렇게 한 후에는 poll-votes에서 해당하는 UUID를 찾아 새로운 UUID로 변경해야 합니다. 이렇게 하면 투표나 답변을 잃지 않습니다.

  2. 마이그레이션을 다시 실행하고 다음 오류를 확인합니다:

rake db:migrate:up VERSION=20180820080623

  1. 마이그레이션이 완료되고 모든 투표가 새로운 테이블로 마이그레이션될 때까지 이 과정을 반복합니다.

그 UUID가 무엇인지, 무엇을 가리키는지 설명조차 해주지 않은 채 아무도 답변하지 않은 것에 실망합니다. 오픈 소스라는 점과 커밋된 지 몇 년이 지났다는 점은 알고 있습니다. 불평하려는 것이 아니라, 공식 저장소에서 실제로 커밋을 하는 사람들의 어떤 도움이라도 감사할 것입니다.

문제는 해결되었으니 기쁜 날입니다.

감사합니다!