我有一个数据库列,因为integet设置为限制19.它在localhost上运行正常,因为我有sqlite。但是我无法在Heroku pg数据库上迁移。
class AdddivIdToLocations < ActiveRecord::Migration
def change
add_column :locations, :div_id, :integer, :limit => 19
end
end
然后我尝试将列从整数更改为字符串,这样会更好。但是因为它无法继续heroku run rake db:migrate
我无法更改列类型。我该怎么办?
class AdddivIdToLocationsTypeChange < ActiveRecord::Migration
def self.up
change_table :locations do |t|
t.change :div_id, :string
end
end
def self.down
change_table :locations do |t|
t.change :div_id, :integer
end
end
end
答案 0 :(得分:1)
div_id
的最大值是多少?
:limit
指定最大存储大小(以字节为单位) - 可用值如下:
+------------------------------------------------------------+
| :limit | Numeric Type | Column Size | Max Value |
|--------+---------------+-------------+---------------------|
| 1 | TINYINT | 1 byte | 127 |
| 2 | SMALLINT | 2 bytes | 32767 |
| 3 | MEDIUMINT | 3 bytes | 8388607 |
| 4 | INT(11) | 4 bytes | 2147483647 |
| 8 | BIGINT | 8 bytes | 9223372036854775807 |
+------------------------------------------------------------+
如果您没有指定任何值,则默认为4
INT(11)
。如果您的值大于整数,则设置limit: 8
,以便它可以存储BIGINT。 19不是有效值。
您可以更新limit:
部分迁移并再次运行db:migrate。
如果要更改列类型,则首先必须存在此列,对于此运行db:migrate without limit: