当前位置: 首页 > 知识库问答 >
问题:

Flyway迁移模式版本

谢善
2023-03-14

我想使用 Flyway 获取特定数据库的最新架构版本值。Flyway 中是否有函数可以在命令行中获取当前架构版本号?

我可以运行以下命令:

flyway info

这为我提供了数据库的整个架构内容(缩短),如下所示:

+----------------+-------------------------------------+---------------------+---------+
| Version        | Description                         | Installed on        | State   |
+----------------+-------------------------------------+---------------------+---------+
| 1.0.1          | Create Table TRACKPATH              | 2015-11-10 08:39:36 | Success |
| 1.0.2          | Create Table TRACKGAUGE             | 2015-11-10 08:39:36 | Success |
| ...            | ...                                 | ...                 | ...     |
| 1.5.7          | Create Table FUNCTIONAL SITE        | 2015-11-10 08:40:10 | Success |
| 1.5.8          | Create Table TOPOGRAPHY AREA        | 2015-11-10 08:40:10 | Success |
| 1.5.9          | Create Table FS DETAILDEFD          | 2015-11-10 08:40:11 | Success |
+----------------+-------------------------------------+---------------------+---------+

我只对最后一个架构条目版本“1.5.9”值感兴趣。

我的环境如下:

    < li>Windows 7 < li>Flyway 3.0

共有2个答案

刘元青
2023-03-14

除了@Alex Yates提供的答案,由于Flyway提供的回调概念,可能还有另一种方法。

回调允许你使用SQL或者Java回调,按照官方文档挂钩到Flyway的生命周期。

在您的情况下,可以定义一个对“afterInfo”命令步骤的回调,它捕获版本并在变量中维护它,或者在其他地方打印它,供您的脚本稍后使用。

廉志强
2023-03-14

我最近不得不在为八达通部署构建Flyway插件时解决这个问题。(目前正在等待合并):

https://github.com/OctopusDeploy/Library/pull/244

如果有办法只返回版本号,我找不到。相反,我按照大卫·阿特金森的建议,从“迁移信息”中找到版本号。

以下PowerShell适合我。让我知道它是否解决了你的问题。(是的,可能有比保存重要逻辑的超级行更好的方式来做这件事!)

# Saving target DB info
$flywayCmd = "C:\path\to\flyway.cmd"
$arguments = @(
    "info", 
    "-url=$targetUrl",
    "-user=$targetUser",
    "-password=$targetPassword"
)
Write-Host "Determining version of target database:"
Write-Host "Executing the following: & $flywayCmd $arguments"
$targetDbInfo = & $flywayCmd $arguments
Write-Host "Target DB info:"
Write-Host $targetDbInfo

# Finding intended version number of target database
$targetDbVersion = ($targetDbInfo | ? {$_.StartsWith("|") } | ? { $_ -notcontains "No migrations found" } | % { $parts = $_.Split('|'); New-Object PSObject -Property @{Version = $parts[1].Trim(); State = $parts[4].Trim()}} | ? { $_.State -eq "Success" } | Select-Object -Last 1).Version
Write-Host "Target database is at version $targetDbVersion"
 类似资料:
  • 我认为留档(http://flywaydb.org/getstarted/existingDatabaseSetup.html)不够清楚,希望用一个例子来说明。我有一个给你: 假设我们有两个不同版本的生产数据库(1和2),其模式版本是隐式的,但通过查询现有表来确定。然后,我们将如何实现文档中描述的内容? 在我的例子中,两个版本都附加了一个脚本:版本1:创建表版本2:创建表 我已经创建了与版本1和版

  • 在使用可重复迁移时,我观察到一些奇怪的飞行路线行为。文件指出: 在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。 但在我的例子中,可重复迁移(正在重新创建一个DB视图)似乎失败了,因为它是在版本化迁移之前执行的。 迁移前的Flyway信息数据:

  • 我们面临一个问题:假设一个开发人员在处理分支a的过程中提供了一个新的迁移版本,比如说V331,同时一个QA人员在另一个分支B的QA环境中进行QA。可能会出现qa环境已经有v331版本的情况,因为几个开发人员可能会在不同的时间在不同的分支上创建相同的版本号……更多的是qa经常在分支之间切换,这就是qa数据库变得混乱的原因,特别是表schema_version,这导致我们手动删除损坏的模式版本,解决旧

  • 我已成功地将spring boot配置为使用Flyway的新项目 随Postgres数据库从版本0001.0迁移到0008.0 我已在本地手动更改脚本,但flyway迁移失败。 错误消息示例: 注意:-我不想从表flyway_schema_history中删除脚本条目。

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 我们使用的是以前的1.7版本的flyway,正在尝试升级到2.3版本。新的flyway似乎不喜欢我们的迁移文件名的格式。是否有一种方法可以将飞行路线配置为使用这样的模式: 而不必重命名数百个预先存在的迁移文件以适应 图案?