我有一个场景,如果我回滚到我的应用程序的先前版本,迁移步骤将失败,并出现有关缺少脚本的错误,例如。error: no migration found for version 10 error: file does not exist
我不希望回滚数据库更改,而只是在这种情况下跳过运行迁移步骤。
我尝试在我的entrypoint.sh
代码中实现一个简单的检查;但是,golang-migrate
似乎没有提供通过 cli 检索(和保留)数据库迁移版本的方法。
version
我在下面的示例中尝试了打印当前版本的命令。但是,该值无法保存到变量中 - 我认为该命令在运行后会与数据库断开连接并擦除检索到的版本。
#!/bin/bash
set -euo pipefail
MIGRATION_COUNT=$(find /app/config/db/migrations/*.up.sql | wc -l)
echo 'MIGRATION_COUNT: ' $MIGRATION_COUNT
CURRENT_VERSION=$(/app/migrate -source=file:///app/config/db/migrations/ -database=<connection_string> version)
echo 'CURRENT_VERSION: ' $CURRENT_VERSION
if [ "$MIGRATION_COUNT" -gt "$CURRENT_VERSION" ]; then
/app/migrate \
-source=file:///app/config/db/migrations/ \
-database=<connection_string> \
up
fi
/app/my-app
上述脚本的输出(您可以看到当前版本10
确实打印但不保存到 CURRENT_VERSION 变量):
Attaching to my_app
my_app | MIGRATION_COUNT: 9
my_app | 10
my_app | CURRENT_VERSION: [2021-09-06T03:00:55.8023451Z] [INFO] [app=myapp-migrate] Migrating database{"host":"db","port":5432,"dbname":"myappname","user":"myapp","password":"XXXXX","tls":{"mode":"disable"},"maxconn":25,"maxidle":3}
my_app | /app/entrypoint.sh: line 11: [: [2021-09-06T03:00:55.8023451Z] [INFO] [app=myapp-migrate] Migrating database{"host":"db","port":5432,"dbname":"myappname","user":"myapp","password":"XXXXX","tls":{"mode":"disable"},"maxconn":25,"maxidle":3}: integer expression expected
想知道是否有人知道我如何在 bash 脚本中检索当前版本。如果没有,是否有另一种方法来实现跳过迁移步骤?我无法使用golang-migrate
库找到这种逻辑的任何选项