Heroku pg,无法以限制19迁移int

时间:2018-01-04 22:38:19

标签: ruby-on-rails sqlite heroku pg

我有一个数据库列,因为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

1 个答案:

答案 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: