GitDDL::Migrator - database migration utility for git managed SQL extended GitDDL


    use GitDDL::Migrator;
    my $gd = GitDDL::Migrator->new(
        work_tree => '/path/to/project', # git working directory
        ddl_file  => 'sql/schema_ddl.sql',
        dsn       => ['dbi:mysql:my_project', 'root', ''],


GitDDL::Migrator is database migration utility extended GitDDL.

GitDDL is very cool module. It's very simple and developer friendly. I use it in development, but features of it are not enough in operation phase.

Features needed at operation phases are: e.g.

save migration history
rollback to previous version
specify version
specify SQL (sometimes SQL::Translator's output is wrong)
check differences from versioned SQL and real database

Then for solving them, I wrote GitDDL::Migrator.



Create GitDDL::Migrator object. Available options are:

work_tree => 'Str' (Required)

Git working tree path includes target DDL file.

ddl_file => 'Str' (Required)

DDL file ( .sql file) path in repository.

If DDL file located at /repos/project/sql/schema.sql and work_tree root is /repos/project, then this option should be sql/schema.sql

dsn => 'ArrayRef' (Required)

DSN parameter that pass to DBI module.

version_table => 'Str' (optional)

database table name that contains its git commit version. (default: git_ddl_version)

ignore_tables => 'ArrayRef' (optional)

tables for ignoring when calling check_ddl_mismatch(). (default: empty)


migrate database


display differences from versioned DDL and real database setting.


alias of real_diff


display differences from real database setting and versioned DDL.


check differences from versioned DDL and real database setting.


get previous database version.


display differences SQL from current version and previous version.


Only create version table, don't deploy any other SQLs. It is useful to apply GitDDL::Migrator to existing databases.


Copyright (C) Masayuki Matsuki.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Masayuki Matsuki <>