in reply to OT: Ways of managing changes to a database's structure during a project.

You might want to take a look at Alzabo. This seems a good fit with what you are trying to do.

--
I'm Not Just Another Perl Hacker

  • Comment on Re: OT: Ways of managing changes to a database's structure during a project.

Replies are listed 'Best First'.
Re: Re: OT: Ways of managing changes to a database's structure during a project.
by autarch (Hermit) on Feb 04, 2004 at 21:08 UTC

    Thanks for the plug ;)

    If you're using Alzabo to manage your schema structure then using it as part of an install/update process is trivial. Here's some sample code from a Module::Build subclass I wrote:

    sub ACTION_update_db { $_[0]->_update_db; } sub _update_db { my $self = shift; $self->depends_on('install'); require Alzabo::Create::Schema; my $schema_svn_dir = File::Spec->catdir ( $self->base_dir, 'alzabo-schema-files', 'NameOfSchema' ); my $to_dir = File::Spec->catdir ( Alzabo::Config::schema_dir(), 'NameOfSchema' ); my $copied; foreach my $file ( glob File::Spec->catfile ( $schema_svn_dir, 'NameOfSchema.*' ) ) { my $file = $self->copy_if_modified( from => $file, to_dir => $to_dir, flatten => 1, ); $copied = $file if defined $file; } return unless $copied; require Alzabo::Create::Schema; my $s = Alzabo::Create::Schema->load_from_file ( name => 'NameOfSchema' ); my %connect = ( user => 'username', password => 'password', ); if ( grep { /NameOfSchema/ } $s->driver->schemas(%connect) ) { # This makes the live schema in the database look # like the schema stored in the Alzabo data files. $s->sync_backend(%connect); } else { $s->set_instantiated(0); $s->create(%connect); } }

    This code can be run as its own action (./Build update_db), and it's also run when the install action is run. It's pretty darn convenient.