ecto_migrate alternatives and similar packages
Based on the "ORM and Datamapping" category.
Alternatively, view ecto_migrate alternatives based on common mentions on social networks and blogs.
-
memento
Simple + Powerful interface to the Mnesia Distributed Database 💾 -
paper_trail
Track and record all the changes in your database with Ecto. Revert back to anytime in history. -
ExAudit
Ecto auditing library that transparently tracks changes and can revert them. -
ecto_psql_extras
Ecto PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more. -
arbor
Ecto elixir adjacency list and tree traversal. Supports Ecto versions 2 and 3. -
sqlitex
An Elixir wrapper around esqlite. Allows access to sqlite3 databases. -
boltun
Transforms notifications from the Postgres LISTEN/NOTIFY mechanism into callback execution -
sql_dust
Easy. Simple. Powerful. Generate (complex) SQL queries using magical Elixir SQL dust.
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of ecto_migrate or a related project?
README
Ecto Migrate 
Ecto migrate brings automatic migrations to ecto. Instead of defining and writting manuall diffing
from actual model and old model. The ecto_migrate
do it for you. It save actual represantation of
a model model in database and checks, if actual model have the same format as saved in database.
To test, use EctoIt (is depended on it for tests purposes):
iex -S mix
After, it should be possible:
:application.start(:ecto_it)
alias EctoIt.Repo
import Ecto.Query
defmodule Weather do # is for later at now
use Ecto.Model
schema "weather" do
field :city
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
end
end
Ecto.Migration.Auto.migrate(Repo, Weather)
%Weather{city: "Berlin", temp_lo: 20, temp_hi: 25} |> Repo.insert
Repo.all(from w in Weather, where: w.city == "Berlin")
Lets redefine the same model in a shell and migrate it
defmodule Weather do # is for later at now
use Ecto.Model
schema "weather" do
field :city
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
field :wind, :float, default: 0.0
end
end
Ecto.Migration.Auto.migrate(Repo, Weather)
Repo.all(from w in Weather, where: w.city == "Berlin")
Lets use references
defmodule Post do
use Ecto.Model
schema "posts" do
field :title, :string
field :public, :boolean, default: true
field :visits, :integer
has_many :comments, Comment
end
end
defmodule Comment do
use Ecto.Model
schema "comments" do
field :text, :string
belongs_to :post, Post
end
end
Ecto.Migration.Auto.migrate(Repo, Post)
Ecto.Migration.Auto.migrate(Repo, Comment)
ecto_migrate
also provides additional migrate/3
API. For using with custom source defined models. Example:
defmodule Taggable do
use Ecto.Model
schema "this is not a valid schema name and it will never be used" do
field :tag_id, :integer
end
end
defmodule MyModel do
use Ecto.Model
schema "my_model" do
field :a, :string
has_many :my_model_tags, {"my_model_tags", Taggable}, [foreign_key: :tag_id]
end
end
Now we can migrate my_model_tags
table with:
Ecto.Migration.Auto.migrate(Repo, MyModel)
Ecto.Migration.Auto.migrate(Repo, Taggable, [for: MyModel])
It will generate and migrate my_model_tags
table to the database which will be associated with my_model
table.
Indexes
ecto_migrate
has support of indexes:
defmodule Weather do # is for later at now
use Ecto.Model
use Ecto.Migration.Auto.Index
index(:city, unique: true)
index(:prcp)
schema "weather" do
field :city
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
end
end
If you do not want to use DSL for defining indexes, macro index doing no more, as generate function:
defmodule Weather do # is for later at now
use Ecto.Model
schema "weather" do
field :city
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
end
def __indexes__ do
[{[:city], [unique: true]},
{[:prpc], []}]
end
end
Extra attribute options
defmodule Weather do # is for later at now
use Ecto.Model
use Ecto.Migration.Auto.Index
schema "weather" do
field :city
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
end
def __attribute_option__(:city), do: [size: 40]
def __attribute_option__(_), do: []
end
Possibility to have more sources
If the same model used by different sources, it is possible to define callback for it
defmodule Weather do # is for later at now
use Ecto.Model
use Ecto.Migration.Auto.Index
schema "weather" do
field :city
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
end
def __sources__, do: ["weather", "history_weather"]
end
Upgrades in 0.3.x versions
If you have installed version before 0.3.2, use 0.3.2 or 0.3.3 for upgrading the table, after that it is possible to upgrade higher versions.