Heroku pg, не может мигрировать int с ограничением 19

У меня есть столбец базы данных как 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 ответ

Решение

Каково максимальное значение 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 |
+------------------------------------------------------------+

Если вы не укажете какое-либо значение, то по умолчанию это 4INT(11), Если ваше значение будет больше, чем целое число, установите limit: 8 поэтому он может хранить BIGINT. 19 не является допустимым значением.

Вы можете обновить limit: часть миграции и запустите db:migrate снова. Если вы хотите изменить тип столбца, то сначала этот столбец должен существовать, для этого запустите db:migrate без limit:

Другие вопросы по тегам