accounts/scripts/drop-db.sh

28 lines
1.2 KiB
Bash
Raw Permalink Normal View History

2026-01-24 22:36:29 +08:00
#!/usr/bin/env bash
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/_common.sh"
echo "⚠️ 即将删除数据库 ${DB_NAME} ..."
read -r -p "确定要删除数据库 ${DB_NAME}? [y/N] " confirm
if [ "${confirm}" = "y" ] || [ "${confirm}" = "Y" ]; then
echo ">>> 强制断开现有连接 ..."
if ! PGPASSWORD="${DB_ADMIN_PASS}" psql -h "${DB_HOST}" -U "${DB_ADMIN_USER}" -d postgres \
-c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='${DB_NAME}' AND pid <> pg_backend_pid();"; then
echo "⚠️ 无法断开所有连接(需要超级用户权限)"
fi
echo ">>> 清理 pglogical schema ..."
PGPASSWORD="${DB_ADMIN_PASS}" psql -h "${DB_HOST}" -U "${DB_ADMIN_USER}" -d "${DB_NAME}" \
-c "DROP SCHEMA IF EXISTS pglogical CASCADE;" >/dev/null 2>&1 || \
echo "⚠️ 无法删除 pglogical schema数据库可能不存在或缺少权限"
echo ">>> 删除数据库 ${DB_NAME} ..."
if PGPASSWORD="${DB_ADMIN_PASS}" psql -h "${DB_HOST}" -U "${DB_ADMIN_USER}" -d postgres \
-c "DROP DATABASE IF EXISTS ${DB_NAME};"; then
echo ">>> 数据库已删除"
else
echo ">>> 删除失败"
fi
else
echo "取消删除"
fi