How to change column to nullable with modify in Ecto migration

Article autor
July 29, 2021
How to change column to nullable with modify in Ecto migration
Elixir Newsletter
Join Elixir newsletter

Subscribe to receive Elixir news to your inbox every two weeks.

Oops! Something went wrong while submitting the form.
Elixir Newsletter
Expand your skills

Download free e-books, watch expert tech talks, and explore open-source projects. Everything you need to grow as a developer - completely free.

Table of contents

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

No items found.

You might also like

Discover more content from this category

How to get the struct type in Elixir

So you don’t know what’s the type of struct you’re passing somewhere? Maybe it can be one of few types and you have to distinguish them? Or any other reason… But it’s about checking the struct type. Just use one of the coolest Elixir features - pattern matching!

How to find DOM elements that cause body overflow

Sometimes you may notice that your website displays an unintended horizontal scrollbar. You may be wondering what is the cause.

How to check if a set contains exact values with Jest in JS?

TLDR: With jest-extended package you can write: expect([...set]).toIncludeSameMembers([value1, value2]);. If you are looking to a native, but longer solution scroll down a bit.