我正在使用一个针对MySQL运行一段时间的项目。有这样的迁移:
add_index "things", ["one", "two", "three", "andevenmorelongnamedfields"]
导致名为index_things_on_one_and_two_and_three_and_andevenmorelongnamedfields
的索引。对于MySQL来说这是好的,但对PostgreSQL来说太长了。
This question建议更改现有迁移。
add_index "things", ["one", "two", "three", "andevenmorelongnamedfields"], :name => "index_things_on_one_and_two_and_three_and_more"
这会在表面上解决它。
然而,代码库已经针对MySQL运行,因此改变过去的迁移将是一个坏主意。我正试图从头开始安装PostgreSQL(我认为)意味着运行所有迁移?
我可能在这里遗漏了一些东西(我对Django比较熟悉),但我认为ActiveRecord在这个特定实例中与PostgreSQL不兼容是正确的吗?
如何解决这个问题(即让它与Postgres和MySQL一起使用)而不会为其他人创建完整性问题?
答案 0 :(得分:1)
一种方法是在MySQL端创建和运行新的迁移,将索引重命名为更短的内容。然后你就可以在Postgres端运行rake db:schema:load
并且不应该有问题。
另请注意db/schema.rb
顶部的警告:
请注意,此schema.rb定义是数据库架构的权威来源。如果需要在另一个系统上创建应用程序数据库,则应使用db:schema:load,而不是从头开始运行所有迁移。后者是一种有缺陷且不可持续的方法(你会积累的迁移越多,它的运行速度越慢,发生问题的可能性就越大)。
这绝对是“有缺陷且不可持续”的一个例子......