DEV Community

Marcøs
Marcøs

Posted on • Edited on

Elixir - schema drop

See Files on Github
config.exs
mix.exs
schema_drop.exs

There may be cases when you share a database (but not a schema) with other applications. So using mix ecto.drop may not be an option. In this case, dropping the schema may be a better alternative.

First configure your ecto migrations settings in config.exs.

config :portishead, Portishead.Repo,
  migration_default_prefix: "portishead",
  migration_source: "portishead_schema_migrations"
Enter fullscreen mode Exit fullscreen mode

Add schema_drop.exs script to the priv/repo folder. The script gets the schema and migration table from the config and runs raw sql to drop them. This script is using PL/pgSQL.

Repo.query!("DROP SCHEMA IF EXISTS #{schema} CASCADE")
Repo.query!("DROP TABLE IF EXISTS #{migration_table}")
Enter fullscreen mode Exit fullscreen mode

In mix.exs, add an alias to drop the schema

  defp aliases do
    [
      "ecto.schema.drop": ["run priv/repo/schema_drop.exs"]
    ]
  end
Enter fullscreen mode Exit fullscreen mode

From the shell, you can now run

$ mix ecto.schema.drop
Enter fullscreen mode Exit fullscreen mode

or you can add an aliases to use ecto.schema.drop

  defp aliases do
    [
      "ecto.schema.reset": ["ecto.schema.drop", "ecto.setup"]
    ]
  end
Enter fullscreen mode Exit fullscreen mode

Top comments (0)