Skip to content

Perl module for applying incremental database deltas/migrations to a database

Notifications You must be signed in to change notification settings

gavincarr/DBIx-Delta

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

DBIx::Delta - a module for applying outstanding database deltas (migrations) to a database instance

SYNOPSIS

# Must be used via a subclass providing a db connection e.g.
package Foo::Delta;
use base qw(DBIx::Delta);
use DBI;
sub connect { 
    DBI->connect('dbi:SQLite:dbname=foo.db');
}
1;

# Then:
perl -MFoo::Delta -le 'Foo::Delta->run'
# Or create a delta run script (e.g. delta.pl):
use Foo::Delta;
Foo::Delta->run;

# Then to check for deltas that have not been applied
./delta.pl 
# And to apply those deltas and update the database
./delta.pl -u

DESCRIPTION

DBIx::Delta is a module used to apply database deltas (migrations) to a database instance.

It is intended for use in maintaining multiple database schemas in sync e.g. you create deltas on your development database instance, and subsequently apply those deltas to your test instance, and then finally to production.

It is simple and only requires DBI/DBD for your database connectivity.

DELTAS

Deltas are just '*.sql' files containing arbitrary sql statements, in your current directory. Any deltas that haven't been seen before are executed against your database, and if successful, the filename is recorded in an 'applied' subdirectory, and those deltas are thereafter ignored.

This means that you can't change or add to a delta after it has been applied to the database. Changes to existing database objects must be done via new deltas using appropriate 'ALTER' commands.

USAGE

# Must be used via a subclass providing a db connection e.g.
package Foo::Delta;
use base qw(DBIx::Delta);
use DBI;
sub connect { 
    DBI->connect('dbi:SQLite:dbname=foo.db','','');
}
1;

# And then ...
perl -MFoo::Delta -le 'Foo::Delta->run'

STATEMENT FILTERING

As of version 0.5 DBIx::Delta supports statement filtering, allowing subclasses to do arbitrary munging of statements before they're applied. This is done by overriding the filter_statement method in your subclass:

sub filter_statement {
  my ($self, $statement) = @_;

  # Munge $statement

  return $statement;
}

This can be useful, for instance, if you're doing IP-based grants in your deltas, and need to use different addresses for your different environments. For instance, you could use the following grant in your delta (mysql syntax):

grant all on db.table to user@localhost;

and then modify it in your production DBIx::Delta subclass by doing:

$statement =~ s/^(grant.*)localhost/${1}192.168.0.10/;

AUTHOR

Gavin Carr gavin@openfusion.com.au

LICENCE

Copyright 2005-2014, Gavin Carr.

This program is free software. You may copy or redistribute it under the same terms as perl itself.

About

Perl module for applying incremental database deltas/migrations to a database

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages