Elixir Q & A


How to handle database migrations in Elixir?

Handling database migrations in Elixir is a fundamental part of managing your application’s database schema and ensuring that it evolves alongside your code changes. Elixir provides a robust tool called Ecto Migrations, which simplifies the process of creating, applying, and managing database schema changes.


Here’s a step-by-step guide on how to handle database migrations in Elixir:


  1. Install Ecto: Ensure that you have Ecto installed as part of your Elixir project. You can include it as a dependency in your project’s mix.exs file.


  1. Generate a Migration: To create a new migration, use the `mix ecto.gen.migration` command followed by a descriptive name for your migration. This generates a new migration file in the `priv/repo/migrations` directory of your project.


  1. Edit the Migration: Open the generated migration file in your code editor. In the `change` function within the migration module, define the database changes you want to make. This can include creating or modifying tables, adding or removing columns, and defining indexes or constraints.


  1. Running Migrations: Apply the migration using the `mix ecto.migrate` command. Ecto will execute any pending migrations, ensuring that your database schema matches the changes defined in your migration files.


  1. Rollback Migrations: If needed, you can roll back migrations using the `mix ecto.rollback` command. This reverts the last batch of applied migrations.


  1. Managing Schema Versions: Ecto Migrations keeps track of applied migrations in the database. You can check the status of migrations with `mix ecto.migrations`. It shows which migrations have been applied and which are pending.


  1. Customizing Migrations: Ecto Migrations provide flexibility to define custom migrations beyond the default `change` function. You can add custom SQL statements or perform more complex database operations when necessary.


  1. Seed Data: You can also include seed data in your migrations to populate the database with initial data. This is often used to insert default records or test data.


  1. Testing Migrations: Writing tests for your migrations is important to ensure they work as expected. Ecto provides a testing framework to test your migrations alongside your application code.


By following these steps, you can effectively manage database migrations in your Elixir project. Ecto Migrations simplifies the process of evolving your database schema in sync with your application’s development, making it easier to maintain and update your database as your project evolves.


Previously at
Flag Argentina
time icon
Tech Lead in Elixir with 3 years' experience. Passionate about Elixir/Phoenix and React Native. Full Stack Engineer, Event Organizer, Systems Analyst, Mobile Developer.