Ler*_*roy 3 command-line flyway
我想使用 Flyway 获取特定数据库的最新架构版本值。Flyway 中是否有函数可以在命令行中获取当前模式版本号?
我可以运行以下命令:
flyway info
Run Code Online (Sandbox Code Playgroud)
这为我提供了数据库的整个架构内容(已缩短),如下所示:
+----------------+-------------------------------------+---------------------+---------+
| 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 |
+----------------+-------------------------------------+---------------------+---------+
Run Code Online (Sandbox Code Playgroud)
我只对最后一个架构条目版本 '1.5.9' 值感兴趣。
我的环境如下:
小智 5
我最近在为 Octopus Deploy 构建 Flyway 插件时不得不完全解决这个问题。(目前正在等待合并):
https://github.com/OctopusDeploy/Library/pull/244
如果有办法只返回版本号,我找不到它。相反,我按照 David Atkinson 的建议做了,并抓取了“迁移信息”以查找版本号。
以下 PowerShell 对我有用。让我知道它是否能解决您的问题。(是的,可能有比包含重要逻辑的 uber-line 更好的方法!)
# 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"
Run Code Online (Sandbox Code Playgroud)