如何避免非数据结构(视图,存储过程等)的代码重复

时间:2013-06-28 10:33:47

标签: flyway

我的项目包含很多对象,例如视图和存储过程,这些对象经常被更改。现在我必须在每次更新时创建新的SQL脚本,其中包含已更改对象的完整源代码,尽管我实际上只更改了几行。它导致大量的代码重复,我也发现很难回顾这些变化。

我希望每个对象(如视图或过程)只有一个实际版本的SQL脚本,并在每次重新部署数据库时重新创建这些对象。因此,我可以更改现有的源文件(如Java或C编程),而不是每次需要更改视图或过程时都创建新的更新。

每次使用Flyway迁移数据库时,是否有可能执行某些脚本?

2 个答案:

答案 0 :(得分:0)

我不确定为什么有这么多的downvotes,这是一个完全可以理解和有效的问题。也许这是因为它非常类似于这个悬而未决的问题: Migrating Stored Procedures with Flyway

我们现在正开始反对这个问题。我们一直在使用flyway进行开发和测试(并且喜欢它)。但是我们已经开始必须使用触发器/触发器/视图(p / t / v),以及我们之前如何使用它们以及我们必须如何使用flyway之间的基本脱节。是一种压力。

之前,对于给定的数据库对象(假设这是一个过程),会有一个源文件。如果你需要更改proc'n'次,你的VCS中会有'n'版本的同一个文件。差异工具工作得很好,IDE都明白这一点,当两个在不同分支机构工作的开发人员对proc等进行更改等时合并检测。你知道,老派。

但是对于flyway,任何一个'n'更改的proc现在分散在'n'个文件中。而不是“具有'n'版本的一个文件中的一个对象”,“n'文件中有一个目标,每个文件只有一个变化”。我现在需要在IDE中为“proc_name”的任何实例进行文本搜索,如果我想知道proc的更改历史记录。 VCS对此一无所知。开发人员可以在自己的分支中进行迁移,这些分支在部署每个分支时都会成功,但是会使proc缺少更新。

我不是说任何一个抱怨飞路,我完全意识到这不是一个简单的区域。我差点说这是不可解决的(乘飞路)。

我们计划如何处理这个问题,我很想知道其他人是如何处理它的。

答案 1 :(得分:-1)

现在,Flyway 4.0支持可重复迁移。 只需添加以" R"开头的sql文件没有任何版本信息到您的迁移文件夹:

R__Blue_cars.sql

您必须确保脚本可以重复迁移。 这通常由"创建或替换"你的DDL陈述中的条款。

https://flywaydb.org/documentation/migration/repeatable