【发布时间】:2014-01-26 22:10:42
【问题描述】:
我正在使用带有 Rails 的 PostgreSQL,并且我有一个带有 int 主键的表。我很确定它会以我使用它的方式用完uid(最终插入数十亿次)。有什么方法可以将 int 主键转换为 bigint?我只在 SO 上看到了涉及使用 bigint 主键创建新表的解决方案。
【问题讨论】:
我正在使用带有 Rails 的 PostgreSQL,并且我有一个带有 int 主键的表。我很确定它会以我使用它的方式用完uid(最终插入数十亿次)。有什么方法可以将 int 主键转换为 bigint?我只在 SO 上看到了涉及使用 bigint 主键创建新表的解决方案。
【问题讨论】:
你有一些选择。其中之一是使用原始 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 mytable ALTER COLUMN my_id_column TYPE bigint 。 ALTER TABLE 文档会告诉您这一点,上述帖子中的链接也会告诉您。 但是如果有对表的外键引用,这会变得更加复杂。
change_column :table, :id , "bigint NOT NULL AUTO_INCREMENT" 怎么样?这行得通吗?
limit的版本吗?此外,通常当您使用 ActiveRecord 时,您不需要定义 FK 约束(因为这是在应用程序级别为您完成的)。这有点 SQL 反模式,但是..