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 |
+------------------------------------------------------------+
Если вы не укажете какое-либо значение, то по умолчанию это 4
INT(11)
, Если ваше значение будет больше, чем целое число, установите limit: 8
поэтому он может хранить BIGINT. 19 не является допустимым значением.
Вы можете обновить limit:
часть миграции и запустите db:migrate снова. Если вы хотите изменить тип столбца, то сначала этот столбец должен существовать, для этого запустите db:migrate без limit: