配置git以使用flyway对具有不同名称模式的文件进行提交差异

时间:2018-11-26 18:17:48

标签: git postgresql flyway

我们使用git来管理代码存储库。

我们的存储库之一是使用flywaydb的数据库迁移存储库。

数据库具有随时间变化的状态和对象依赖性,因此,使用flyway的最佳实践是使用时间戳或数字,然后使用脚本名称来递增文件前缀。这样,文件flyway会按字母顺序(按时间顺序)列出并依次执行,V20181121131512__create_myview.sql V20181126235217__replace_myview.sql 会跟踪最后一个脚本运行的状态,并可以运行丢失的脚本。

问题在于,当文件随时间顺序命名时,它们替换了相同的数据库对象(例如数据库视图),我们如何配置git或flyway,以便在提交时git足够聪明地执行文件与基于模式(而不是该文件的先前版本)的不同名称的文件的区别?

例如,我创建一个视图,几天后有人更新该视图...它将需要两个文件,例如:

SQL

在每个视图中,我们创建或替换一个视图并对其进行更新。我想知道是否可以将git配置为对文件命名模式进行提交时的区别。例如,后缀将用于相同的数据库对象名称。

当有很多请求请求要审核时,我不想一直都进行手动比较,并且我想快速查看不同开发人员之间所做的更改会加快我的审核时间。但是随着时间的推移,数据库状态的顺序命名会强制将数据库对象的先前代码放入不同的文件中,因此对同一数据库对象的每次提交(如result = this.age > person.age ? 1 : this.age < person.age ? -1 : 0; 视图都会“出现”为一个全新文件,并且存在没有历史可与之比较。

关于如何处理此问题的任何想法?可以将git配置为对文件命名后缀模式进行差异提交吗?或者,是否有另一种替代方法来构造飞行文件的回购和文件命名,以便可以解决数据库随时间变化的状态?

1 个答案:

答案 0 :(得分:1)

通过将所有不直接保存数据的长寿命对象切换到Flyway repeatable migrations,可以完全避免此问题。

它们允许您将视图的历史记录保存在Git中的同一文件中。每当其校验和更改时,Flyway都会自动重新应用它。