An Elixir tool that analyzes database migrations to detect potentially dangerous or destructive operations.
Excellent Migrations is a static analysis tool for Elixir applications that checks the safety of database migrations. It analyzes migration files to detect over 15 types of potentially dangerous operations—like removing columns, adding indexes non-concurrently, or executing raw SQL—that can lead to downtime, data corruption, or performance issues in production.
Elixir developers and teams using Ecto for database migrations, particularly those operating PostgreSQL databases in production environments where zero-downtime deployments and data integrity are critical.
Developers choose Excellent Migrations because it proactively catches unsafe migration patterns early in development, integrates seamlessly as a Credo check or standalone mix task, and provides PostgreSQL-specific validations and actionable safety guidance to enforce best practices.
An Elixir tool for checking safety of database migrations.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Detects over 15 types of dangerous operations like removing columns or adding indexes non-concurrently, with detailed examples in the README for each pitfall.
Works as a Credo check, standalone mix task, or migration wrapper, allowing seamless adoption into existing Elixir development workflows without major changes.
Includes database-specific validations for operations like concurrent index creation and JSONB usage, crucial for optimizing production PostgreSQL databases.
Allows developers to mark specific operations as safe with inline or file-wide comments, providing flexibility without disabling entire checks.
Many checks are tailored for PostgreSQL; support for other databases like MySQL is minimal, relying on version-specific notes that may not cover all cases.
Requires adding config comments to assure safety for legitimate raw SQL or other operations, which adds development time and risk of human error.
Focuses only on forward migrations; it doesn't check the safety of rollback operations, which could lead to data loss or downtime if not handled separately.
Needs configuration to skip older migrations via timestamps, which might be error-prone if migrations are modified or if the start_after setting is misconfigured.