Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Reversible migrations #9

Open
axelson opened this issue Jul 8, 2022 · 4 comments
Open

Feature Request: Reversible migrations #9

axelson opened this issue Jul 8, 2022 · 4 comments

Comments

@axelson
Copy link

axelson commented Jul 8, 2022

It would be great if excellent_migrations could enforce that a migration is reversible as a check.

@Artur-Sulej
Copy link
Owner

That's a nice idea.

I guess it could be implemented by checking if def down or def change is implemented.
def change may not be reversible (e.g. if execute is used) but sometimes that may not be easy to detect.

@Artur-Sulej
Copy link
Owner

@axelson I like your idea. Would you like to issue a pull request with the change?

@axelson
Copy link
Author

axelson commented Jul 26, 2022

Thank you! I likely wouldn't get this anytime soon. So it's probably best if you or someone else tackles it.

@Stratus3D
Copy link

I would love to have this feature as well, and I may have some time to implement this.

How should checks for the down and change callbacks work?

For example, given this migration:

defmodule MyMigration do
  use Ecto.Migration

  def change do
    create table(:mytable) do
      add(:some_field, :uuid, null: false)

      timestamps()
    end
  end
end

Ecto migrations will generate rollback code that will drop mytable. If I'd created this same migration but with up and down callbacks excellent migrations would complain about the drop table in the down migration. What is desired? Destructive rollbacks or only safe rollbacks?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

No branches or pull requests

3 participants