ecto_extract_migrations
Mix task to generate Ecto migrations from a Postgres schema SQL file.
This lets you take an existing project and move it into Elixir with a proper development workflow.
Usage
Generate a schema-only dump of the database to SQL:
pg_dump --schema-only --no-owner postgres://dbuser:dbpassword@localhost/dbname > dbname.schema.sqlGenerate migrations from the SQL file:
mix ecto.extract.migrations --sql-file dbname.schema.sqlCreate a test database, run migrations to create the schema, then export it and verify that it matches the original database:
createuser --encrypted --pwprompt dbuser dropdb dbname_migrations createdb -Odbuser -Eutf8 dbname_migrations mix ecto.migrate --log-sql pg_dump --schema-only --no-owner postgres://dbuser@localhost/dbname_migrations > dbname_migrations.sql cat dbname.schema.sql | grep -v -E '^--|^$' > old.sql cat dbname_migrations.sql | grep -v -E '^--|^$' > new.sql diff -wu old.sql new.sql
Details
This was written to migrate a legacy database with hundreds of tables and objects.
The parsers use NimbleParsec, and are based on the SQL grammar, so they are precise and reasonably complete. They don't support every esoteric option, just what we needed, but that was quite a lot. Patches are welcome.
Supports:
ALTER SEQUENCEALTER TABLECREATE EXTENSIONCREATE FUNCTIONCREATE INDEXCREATE SCHEMACREATE SEQUENCECREATE TABLECREATE TRIGGERCREATE TYPECREATE VIEW
Installation
Add ecto_extract_migrations to your list of dependencies in mix.exs:
def deps do
[
{:ecto_extract_migrations, "~> 0.1.0"}
]
endResources
Here are some useful resources for NimbleParsec: