How to change column to nullable with modify in Ecto migration

Sooner or later you'll have to change the null constraint in one of your DB relations. How to do it easily in Ecto?
Although I came across many different examples where a raw SQL has been used to perform this type of operation in Ecto, it's actually super easy to do it with modify/3 function.
Let's assume that your migration looks like this:
create table(:blog_posts) do
add :title, :string, null: false
add :intro, :text, null: false
add :body, :text, null: false
add :category_id, references(:blog_categories, on_delete: :delete_all)
end
... and at some point, you realize that you don't want to force passing the intro column value.
You can change it easily this way:
alter table(:blog_posts) do
modify :intro, :text, null: true, from: :text
end
It's also worth mentioning that it's possible to modify foreign keys with modify:
alter table(:blog_posts) do
modify :category_id,
references(:blog_categories, on_delete: :delete_all),
null: false,
from: references(:blog_categories, on_delete: :delete_all)
end
Work with a team that keeps learning and building better software every day.
Related posts
Dive deeper into this topic with these related posts
You might also like
Discover more content from this category
In some cases, like for testing purposes, you might want to use an npm package stored on a local machine. Here is how you can do that with one simple command.
Hey! Have you ever wondered about tests running inside the IEx shell? For a long time, I was convinced that it’s not really possible. And as it turns out - that’s not really straightforward. You won’t easily find information about that in the documentation.
The macro mechanism in Elixir is not only an interesting metaprogramming feature - in fact, it is at the language's very core. And the more awesome fact is that, using macros, you can override the algorithm of defining functions itself!
