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

Ada*_*ire 12 database migration version-control perl

我一直在寻找在版本控制下获取数据库模式的选项.似乎Ruby人员已经获得了Rails迁移,并且.NET人员有一些选项(例如this,thisthis).Perl怎么样?

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

无偿的细节:

  • 我们大多数情况下使用DBIx :: Class
  • 我们使用MySQL
  • 我们使用SVN

Ovi*_*vid 7

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

我也强烈推荐数据库重构书.除此之外,它还将为您提供出色的安全管理技术,如果您需要回滚,则不会丢失数据(例如,当您删除您认为不需要的列时).

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

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

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


Bri*_*ips 6

一个非常有趣的项目仍然可能有点年轻可靠依赖的是Adam Kennedy的ORLite :: Migrate,它从Rails迁移中获取灵感.他在use.perl.org上写了一篇关于他的计划的非常有趣的期刊,我希望将来能够关注它.

看来这个软件包目前只适用于SQLite,但我认为Adam计划在未来将其构建为更加数据库不可知.


inn*_*naM 3

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

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

当然,在版本控制中拥有架构是一个很大的好处。