最初的问题
在我的 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
然后将迁移所做的添加与我自己的合并。有没有人有更好的主意?