From 67122cc8df315110f3201f8d689efeb7bc2b0b5c Mon Sep 17 00:00:00 2001 From: shenlan Date: Mon, 13 Oct 2025 08:05:54 +0800 Subject: [PATCH] Improve account Makefile database maintenance (#501) --- account/Makefile | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/account/Makefile b/account/Makefile index 7ccaae9..cdbb5db 100644 --- a/account/Makefile +++ b/account/Makefile @@ -66,13 +66,16 @@ init-go: @go mod tidy init-db: - @echo ">>> 初始化数据库 schema" - @command -v psql >/dev/null || (echo "❌ 未检测到 psql,请安装 PostgreSQL 客户端" && exit 1) - @psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $(SCHEMA_FILE) - @if [ -f $(PGLOGICAL_INIT_FILE) ]; then \ - psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $(PGLOGICAL_INIT_FILE) || \ - echo "⚠️ 跳过 pglogical 初始化(非超级用户)"; \ - fi + @echo ">>> 初始化数据库 schema" + @command -v psql >/dev/null || (echo "❌ 未检测到 psql,请安装 PostgreSQL 客户端" && exit 1) + @psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $(SCHEMA_FILE) + @if [ -f $(PGLOGICAL_INIT_FILE) ]; then \ + if psql "$(DB_URL)" -Atc "SELECT rolsuper FROM pg_roles WHERE rolname = current_user" | grep -qx 't'; then \ + psql "$(DB_URL)" -v ON_ERROR_STOP=1 -f $(PGLOGICAL_INIT_FILE); \ + else \ + echo "⚠️ 当前用户非超级用户,跳过 pglogical 初始化"; \ + fi; \ + fi # ========================================= # 🧠 PGLogical 双节点初始化 @@ -120,8 +123,18 @@ dump-schema: @pg_dump -s -O -x "$(DB_URL)" > $(SCHEMA_FILE) drop-db: - @read -p "⚠️ 确认删除数据库 $(DB_NAME)? [y/N] " c && [ "$$c" = "y" -o "$$c" = "Y" ] && \ - PGPASSWORD="$(DB_PASS)" psql -h $(DB_HOST) -U $(DB_USER) -d postgres -c "DROP DATABASE IF EXISTS $(DB_NAME);" || echo "取消操作" + @echo "⚠️ 即将删除数据库 $(DB_NAME) ..." + @read -p "确定要删除数据库 $(DB_NAME)? [y/N] " confirm && \ + if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ + echo ">>> 强制断开现有连接 ..."; \ + PGPASSWORD="$(DB_PASS)" psql -h $(DB_HOST) -U $(DB_USER) -d postgres \ + -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='$(DB_NAME)';"; \ + echo ">>> 删除数据库 $(DB_NAME) ..."; \ + PGPASSWORD="$(DB_PASS)" psql -h $(DB_HOST) -U $(DB_USER) -d postgres \ + -c "DROP DATABASE IF EXISTS $(DB_NAME);" || echo ">>> 删除失败"; \ + else \ + echo "取消删除"; \ + fi reset-public-schema: @psql "$(DB_URL)" -v ON_ERROR_STOP=1 \