如何使用Perl将数据库置于版本控制之下?

时间:2009-02-04 13:36:46

标签: database perl version-control migration

我一直在寻找在版本控制下获取数据库模式的选项。似乎Ruby人员已经Rails Migrations,而.NET人员有一些选项(例如thisthisthis)。 Perl怎么样?

虽然它提到了thread on PerlMonks,但我已经看到了DBIX::Migration::Directories并没有多少。有人真的在使用这个模块或其他模块吗?或者您是否推出了自己的数据库迁移解决方案?

无偿的细节:

  • 我们大部分都使用DBIx :: Class
  • 我们使用MySQL
  • 我们使用SVN

6 个答案:

答案 0 :(得分:7)

在工作中,我们使用DBIx::Migration的修改版本(它有一些限制,例如不超过10次迁移)。然后,您有一个从数据库转储的核心模式,当版本号太低时,您可以使用迁移模式目录中的迁移来升级数据库。

我也强烈推荐Database Refactoring本书。除此之外,它还将为您提供出色的技术来安全地管理迁移安全,如果您需要回滚,则不会丢失数据(例如当您删除列时,您认为是不需要)。

为了帮助它建议的自动弃用时间表,我写了Devel::Deprecate,这样您就不需要记住何时进行弃用。您的代码会为您大声抱怨(并且仅在测试中,而不是在生产中)。

重要 :您会定期发现您使用此技术应用了这么多数据库迁移级别,有时您需要“提升”最低限度基本迁移,因为重建数据库需要很长时间。只需在所需的迁移级别进行数据库的新转储,并删除小于或等于该级别的所有迁移。

更新 :快进几年,今天我推荐sqitch。它是从头开始设计的,用于处理将数据库置于版本控制之下的情况,而不会将您与特定的编程语言或VCS联系起来。

答案 1 :(得分:6)

一个非常有趣的项目仍然可能是一个年轻的依赖是Adam Kennedy的ORLite::Migrate,它从Rails迁移中获取灵感。他在use.perl.org上wrote up a very interesting journal了解他的计划,我希望将来能够留意它。

看起来这个软件包目前只能与SQLite一起使用,但我认为Adam计划在未来建立这个软件包,以便更加与数据库无关。

答案 2 :(得分:3)

POPFile中,我们使用自己的解决方案。我们在db中存储模式版本号,如果程序检测到有更新的模式,它将相应地更新db。这不是我们代码中最好和最有趣的部分。

说实话,如果你还没有使用DBIx :: Class,我没有看到使用DBIx :: Migration :: Directories的优势。您必须提供SQL和版本号以及数据库句柄。您还可以提供更多代码来查找sql​​文件并将其提供给数据库。

当然,在版本控制中使用模式是一个很大的好处。

答案 3 :(得分:3)

我们使用类似于Manni描述的系统。两大缺点是:

  • 无法回滚架构更改(通常这种情况很少见,经过严格测试和测试很难,因此必须手动执行此操作并不是什么大不了的事。)

  • 当您在多个分支中开发时,使用顺序版本号是一件痛苦的事情 - 因为您使用的是SVN,所以这并不像您使用git那样容易出现问题。 : - )

我使用的脚本脚本在这里:database_update并且有一个小example data file

答案 4 :(得分:3)

sqitch怎么样?它将自己宣传为“数据库变更管理应用程序”,

答案 5 :(得分:0)

有一个有趣的CPAN模块(Database::Migrator)。我已经使用它,并且可以正常工作以处理项目的迁移。

每次迁移都会进入自己的目录。迁移按排序顺序应用,通常您以数字前缀开头命名。迁移目录可以包含带有SQL或Perl的文件。