2011-10-03 2 views
0

나는이를 사용하여 DB를 변환 :변환 레일 포스트 그레스에서 DB -> MySQL의

https://github.com/maxlapshin/mysql2postgres

이 일 것 같습니다 한눈에. 테이블/컬럼/인덱스는 포스트그레스 내부에 있습니다 ... 훌륭합니다.

그러나 db : migrate는 모든 마이그레이션을 실행하려고합니다. 마치 schema_migrations 테이블이 올바르게 변환되지 않았거나 레코드가없는 것입니다. 그러나 그것은 모든 레코드를 가지고 있으며, mysql에서와 같은 것처럼 보입니다.

그 또는 postgres 어댑터는 다른 방식으로 마이그레이션을 추적합니다.

답변

2

schema_migrations 테이블에 올바른 스키마가 있습니까? psql에 가서 할 :이 표시되어야합니다

> \d schema_migrations 

:

 Table "public.schema_migrations" 
Column |   Type   | Modifiers 
---------+------------------------+----------- 
version | character varying(255) | not null 
Indexes: 
    "unique_schema_migrations" UNIQUE, btree (version) 

또는 거의 그.

그런 것처럼 보일 경우 db:migrate은 여전히 ​​모든 마이그레이션을 실행하기를 원할 것입니다. 그렇다면 열 값이나 이와 유사한 일부 빈 공간이있을 수 있습니다. 문제를 해결하기 위해 더 많은 시간을 낭비하거나 손으로 다시 작성하고 더 재미있는 활동으로 넘어갈 수 있습니다. psql에서 :

$ for m in *.rb; do printf "insert into schema_migrations (version) values ('%s');\n" $(echo $m | sed 's/_.*//');done | psql -h your_host -U your_user -d your_db 

당신은 -h, -U에 대한 올바른 값을 제공해야하고, -d : 당신의 마이그레이션 디렉토리에서 다음

> drop table schema_migrations; 
> create table schema_migrations (
    version varchar(255) not null, 
    constraint unique_schema_migrations unique (version) 
); 

와 (당신이 뭔가 Unixy에있어 가정) 물론 스위치.

관련 문제