Flyway迁移架构版本

时间:2015-11-12 16:57:32

标签: command-line flyway

我想使用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'值感兴趣。

我的环境如下:

  • Windows 7
  • Flyway 3.0

2 个答案:

答案 0 :(得分:4)

我最近必须在为Octopus Deploy构建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"

答案 1 :(得分:0)

除了@Alex Yates提供的答案之外,还有另一种方式可以归功于Flyway提供的回调概念。

回调允许您使用SQL或Java回调按official doc挂钩到Flyway的生命周期。

在您的情况下,可以定义一个回调&after -fo'捕获版本并将其保存在变量中或将其打印到其他地方的命令步骤,稍后将由您的脚本使用。