ecto_extract_migrations
Mix task to generate Ecto migrations from a Postgres schema SQL file.
Usage
Dump database schema:
pg_dump --schema-only --no-owner postgres://dbuser:dbpassword@localhost/dbname > dbname.schema.sqlGenerate migrations:
mix ecto.extract.migrations --sql-file dbname.schema.sqlRun migrations on a new db and compare with original:
cat dbname.schema.sql | grep -v -E '^--|^$' > old.sql
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_migrations.sql | grep -v -E '^--|^$' > new.sql
diff -wu old.sql new.sqlDetails
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
If available in Hex, the package can be installed
by adding ecto_extract_migrations to your list of dependencies in mix.exs:
def deps do
[
{:ecto_extract_migrations, "~> 0.1.0"}
]
endDocumentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ecto_extract_migrations.
Resources
Here are some useful resources for NimbleParsec: