【发布时间】:2012-08-22 12:55:38
【问题描述】:
最初的问题
在我的 Rails 应用程序中,我需要处理旧数据库中的数据,并使用大量数据作为主键。超出 MySQL 和 PostgreSQL 的 4 字节 INT 或 INTEGER 数据类型限制的数字。但这正是 Rails 的适配器将“integer”翻译成的数据类型。
我的解决方法
这在开发中不是问题,因为 SQLite 只有一种接受大数的整数类型。但是对于暂存/生产(即与任何但 SQLite 一起使用),我必须手动编辑schema.rb 文件以将t.integer "id" 替换为t.column "id", 'BIGINT'。然后加载架构,导入数据,它就可以工作了。
解决方法的问题
现在,每次我运行 Rails 迁移以对数据库架构进行细微更改时,都会自动重新生成整个 schema.rb 文件,并且我的所有 id 列再次只是 t.integer。和以前一样,这在开发(SQLite)中不是问题,但它可能会在生产中,不是吗?我不想每次需要添加或重命名列时都必须删除数据库、加载架构并重新导入所有数据——我更愿意为此使用迁移。
到目前为止,我的解决方法是在迁移之前制作schema.rb 的备份副本,然后将迁移所做的添加与我自己的合并。有人有更好的主意吗?
【问题讨论】:
-
我知道我不应该编辑
schema.rb,但我找不到一个好的替代方案,这就是我问这个问题的原因之一。 -
类似:[在迁移中指定自定义主键][1]。您可以使用 TEXT 代替 BIGINT 吗? [1]:stackoverflow.com/questions/6402189/…
标签: ruby-on-rails database ruby-on-rails-3 rails-migrations