【问题标题】:Rails: How do I migrate my table to use bigint primary keys? [duplicate]Rails:如何迁移我的表以使用 bigint 主键? [复制]
【发布时间】:2014-01-26 22:10:42
【问题描述】:

我正在使用带有 Rails 的 PostgreSQL,并且我有一个带有 int 主键的表。我很确定它会以我使用它的方式用完uid(最终插入数十亿次)。有什么方法可以将 int 主键转换为 bigint?我只在 SO 上看到了涉及使用 bigint 主键创建新表的解决方案。

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    你有一些选择。其中之一是使用原始 SQL:

    class TheMigration < ActiveRecord::Migration
        def up
            execute "alter table .....;" 
        end
    
        def down
            raise ActiveRecord::IrreversibleMigration
        end
    end
    

    但是您应该可以使用 :limit 选项 (http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column) - 它允许您定义整数类型的字节数:

    t.some_col :integer, limit: 8.

    https://moeffju.net/blog/using-bigint-columns-in-rails-migrations

    【讨论】:

    • “alter table”之后是什么?您的“正常”方式不会创建主键,它只会创建一个新的任意 bigint 列,而不是主键。
    • @user2805279 alter table 之后会发生什么?您询问了 Rails 迁移,我假设您了解基本的 SQL。第二个问题的答案在我链接的博文中。
    • @user2805279 ALTER TABLE mytable ALTER COLUMN my_id_column TYPE bigintALTER TABLE 文档会告诉您这一点,上述帖子中的链接也会告诉您。 但是如果有对表的外键引用,这会变得更加复杂。
    • change_column :table, :id , "bigint NOT NULL AUTO_INCREMENT" 怎么样?这行得通吗?
    • @user2805279 你试过limit的版本吗?此外,通常当您使用 ActiveRecord 时,您不需要定义 FK 约束(因为这是在应用程序级别为您完成的)。这有点 SQL 反模式,但是..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多