Track database changes with ecto and structure.sql

Advantages

  • declarative db structure
  • faster db setup on a clean db (you don’t have to run all migrations, you can just apply structure.sql with ecto.load)

Disadvantage:

  • you have to update structure.sql on every migration

Steps

Instead of the following (default) alias in mix.exs

defp aliases do
  [
    setup: ["deps.get", "ecto.setup", "cmd npm install --prefix assets"],
    "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
    "ecto.reset": ["ecto.drop", "ecto.setup"],
    test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"]
  ]
end

use the following:

defp aliases do
  [
    setup: ["deps.get", "ecto.setup", "cmd npm install --prefix assets"],
    "ecto.migrate": ["ecto.migrate", "ecto.dump"],
    "ecto.rollback": ["ecto.rollback", "ecto.dump"],
    "ecto.setup": ["ecto.create", "ecto.load --skip-if-loaded", "ecto.migrate", "run priv/repo/seeds.exs"],
    "ecto.reset": ["ecto.drop", "ecto.setup"],
    test: ["ecto.create --quiet", "ecto.load --skip-if-loaded", "ecto.migrate", "test"]
  ]
end
Edit this page on GitHub