我用这个转换了数据库:
https://github.com/maxlapshin/mysql2postgres
一眼就看起来很有效。在postgres里面有表/列/索引...很棒。
但是,db:migrate想要运行我的所有迁移。就好像schema_migrations表没有正确转换 - 或者没有记录。但它确实拥有所有记录,并且与mysql中的记录相同。
那个或postgres适配器以其他方式跟踪迁移。
答案 0 :(得分: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
:
> drop table schema_migrations;
> create table schema_migrations (
version varchar(255) not null,
constraint unique_schema_migrations unique (version)
);
然后从您的迁移目录(假设您使用的是Unixy):
$ 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
切换提供正确的值。