Как изменить тип поля в Ecto?

18

У меня есть схема:

schema "editables" do
    field :title, :string
    field :content, :string

    timestamps
  end

Теперь я хочу изменить тип одной формы поля :integer на :binary . Каков правильный способ записи миграции, поскольку использование add не работает ...?

def change do
    alter table(:editables) do
      add :title, :binary
      add :content, :binary

      timestamps
    end
  end
    
задан Paulo Janeiro 15.09.2015 в 12:23
источник

1 ответ

22

Чтобы изменить тип, вы должны использовать изменить / 3 . add/3 используется только для добавления новых столбцов.

alter table(:editables) do
  modify :content, :binary
end
    
ответ дан Gazler 15.09.2015 в 12:25
  • О, мой ... Я полностью пропустил это в документации .... :( Спасибо Gazler! –  Paulo Janeiro 15.09.2015 в 12:30
  • , но теперь я получаю эту ошибку: ERROR (datatype_mismatch): столбец «title» не может быть автоматически запущен для ввода bytea –  Paulo Janeiro 15.09.2015 в 12:37
  • @PauloJaneiro Если вы можете удалить свою базу данных, то удаление и повторное создание исправят ее. Проблема в том, что он не сможет автоматически переносить тип. –  Gazler 15.09.2015 в 12:41
  • @PauloJaneiro обязательно обновите свою схему в своей модели. –  Gazler 15.09.2015 в 12:43
  • Право. Так что это невозможно сделать в производстве ... Спасибо Gazler. –  Paulo Janeiro 15.09.2015 в 12:45
Показать остальные комментарии