DBIx::Schema::Migration - An easy way to start using migrations.
version 1.01
use DBI; # it is assumed that you are using DBI to handle your database connections use DBIx::Schema::Migration; my $driver = "SQLite"; # just example, you can use mysql, postgres e.t.c my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; $migration = DBIx::Schema::Migration->new( { dbh => $dbh, # connection handler dir => 'db/migrations', # path to directory with migrations } ); $migration->init(); # create applied_migrations table $migration->up(1); # run 1 migration $migration->up(); # run all migrations $migration->down(1); # rollback 1 migration $migration->down(); # rollback all migrations
Schema migration is a tool that helps to apply incremental and reversible changes to you relational database. You could build cli util or use this class whintin yor ci/cd script. This module relies on DBI and the database connection it creates. It only works with migrations written in sql.
Migration in terms of this module is a directory consisting of two files:
1 *_up.sql - apply changes 2 *_down.sql - reverse changes
Example:
db/migrations/ | |-- 01_create_table_users/ | \ | \-- 01_create_table_users_up.sql | | | |-- 01_create_table_users_down.sql | |-- 02_add_users/ | \ | \-- 02_add_users_up.sql | | | |-- 02_add_users_down.sql
As you can see, there are some naming conventions:
1 Migrations starts with a number that determines the order 2 Migrations ends with up.sql or down.sql
Once a migration has been applied, it is stored in the database, and the migration will not be applied again, until your reverse it with down method.
The main idea behind this module is the creation of simple commands for the cli, as well as easy integration with large applications.
It can be used with dancer easily, just create migration.pl in your app root and put this code inside:
use Dancer2; use Dancer2::Plugin::Database; use DBIx::Schema::Migration; my $dir = config->{migrations}->{directory}; # Instantinating Migration object. my $migration = DBIx::Schema::Migration->new( { dbh => database, dir => $dir, } ); # CLI logic. my ($action, $num) = @ARGV; SWITCH: for ($action) { if (/up/) { $migration->up($num); last SWITCH; } if (/down/) { $migration->down($num); last SWITCH; } if (/init/) { $migration->init(); last SWITCH; } }
Now you can run migrations simply:
perl migration.pl up perl migration.pl down perl migration.pl init
Database handler.
Path to migrations directory, full or relative.
Will apply $num migrations or all of them if $num is not specified.
Will reverse $num migrations or all of them if $num is not specified.
If you find one, please let me know.
https://github.com/AlexP007/DBIx-Schema-Migration - fork or add pr.
Alexander Panteleev <alexpan at cpan dot org>.
This software is copyright (c) 2021 by Alexander Panteleev.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install DBIx::Schema::Migration, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBIx::Schema::Migration
CPAN shell
perl -MCPAN -e shell install DBIx::Schema::Migration
For more information on module installation, please visit the detailed CPAN module installation guide.