Rails喜欢使用自动增量32位整数作为表的主键。当人们接近表格中32行int#行的限制时,他们会怎么做?
答案 0 :(得分:3)
您可以将密钥更改为bigint吗?这是一个8字节(64位)的整数。它为您提供最多9个quantllion而不是40亿。但是,没有本地迁移,您必须执行以下操作:
execute("ALTER TABLE massive_table CHANGE id id BIGINT")
编辑显然在字段as Alex suggested上指定限制确实允许PostgreSQL和mySQL中的bigint。
答案 1 :(得分:1)
您可以使用8字节的id字段。 Rails不提供创建长整数或双精度列的类型,但可以使用:limit参数来完成:
create_table :my_table do |t|
t.integer :long_int_column, :limit => 8
t.float :double_column, :limit => 53
end
8和53是魔数。这适用于PostgreSQL和MySQL数据库,但我没有尝试过任何其他数据库。
如果您要更改表格,则可以编写
change_column :my_table, :my_col, :integer, :limit => 8
8字节id字段的替代方法是以某种方式处理id翻转。这取决于您的数据和应用程序的具体情况。