diff --git a/account/Makefile b/account/Makefile index e6e1ba1..842399d 100644 --- a/account/Makefile +++ b/account/Makefile @@ -5,6 +5,7 @@ OS := $(shell uname -s) SCHEMA_FILE := ./sql/schema.sql MIGRATION_FILES := $(shell ls -1 sql/*.migrate.*.sql 2>/dev/null | sort) + DB_NAME := account DB_USER := shenlan DB_PASS := password @@ -58,19 +59,30 @@ init-db: fi @echo "使用数据库连接: $(DB_URL)" @psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $(SCHEMA_FILE) + +# ========================================= +# migrate-db target +# ========================================= migrate-db: - @echo ">>> 执行数据库 schema 迁移 (level/role metadata & MFA/email verification)" - @if [ -z "$(MIGRATION_FILES)" ]; then \ - echo "❌ 未找到迁移 SQL 文件 (sql/*.migrate.*.sql)"; \ + @echo ">>> 执行数据库 schema 迁移 (level/role/MFA/email verification)" + @echo "--------------------------------------------" + @echo "使用数据库连接: $(DB_URL)" + @if ! command -v psql >/dev/null 2>&1; then \ + echo "未检测到 psql,请先安装 PostgreSQL 客户端"; \ exit 1; \ fi - @MIGRATION_FILE=$$(echo $(MIGRATION_FILES) | tr ' ' '\n' | tail -n 1); \ - echo "--------------------------------------------"; \ - echo "使用数据库连接: $(DB_URL)"; \ - echo "执行迁移文件: $$MIGRATION_FILE"; \ - echo "--------------------------------------------"; \ - psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $$MIGRATION_FILE; \ - echo "✅ 数据库迁移完成: $$MIGRATION_FILE" + @if [ -z "$(MIGRATION_FILES)" ]; then \ + echo "未找到迁移 SQL 文件 (*.migrate.*.sql)"; \ + exit 0; \ + fi + @for file in $(MIGRATION_FILES); do \ + echo "执行迁移文件: $$file"; \ + echo "--------------------------------------------"; \ + psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $$file || { echo "❌ $$file 执行失败"; exit 1; }; \ + echo "✅ $$file 执行完成"; \ + echo ""; \ + done + @echo "✅ 所有迁移执行完成" # 删除数据库(安全防呆) drop-db: