#!/bin/bash # 获取脚本所在目录的绝对路径 SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) # 切换工作目录到脚本所在目录 cd $SCRIPT_DIR # 加载环境变量 load_env_variables() { if [ -f ".envrc" ]; then # 使用direnv加载环境变量 if command -v direnv &> /dev/null; then eval "$(direnv export bash)" # 检查POSTGRES_PASSWORD是否已设置,如果没有设置,尝试执行direnv allow if [ -z "$POSTGRES_PASSWORD" ]; then echo "检测到POSTGRES_PASSWORD未设置,尝试执行direnv allow..." direnv allow # 再次加载环境变量 eval "$(direnv export bash)" # 再次检查POSTGRES_PASSWORD if [ -z "$POSTGRES_PASSWORD" ]; then echo "错误: 密码验证失败,无法继续操作" return 1 fi fi else echo "错误: 未安装direnv,请先安装direnv" return 1 fi else echo "错误: 找不到.envrc文件" return 1 fi return 0 } # 调用函数加载环境变量 if ! load_env_variables; then echo "无法加载环境变量,脚本退出" exit 1 fi # 确认提示 read -p "将终止postgres服务并删除数据库文件和归档文件,但保留所有备份。删除操作不可逆,是否继续?(YES/no): " confirm if [ "$confirm" != "YES" ]; then echo "退出脚本" exit 1 fi container_name=${POSTGRES_CONTAINER_NAME:-postgres} # 判断容器是否存在 if [ "$(docker ps -q -f name=${container_name})" ]; then # 如果容器存在,则执行docker compose down docker compose down fi echo "清除数据库文件..." echo "clear ./data/pgdata/ ..." rm -rf ./data/pgdata/* echo "清除归档文件..." echo "clear ./data/archived/ ..." rm -rf ./data/archived/* echo "clear ./data/wal_backup/ ..." rm -rf ./data/wal_backup/* echo "备份目录保留,未做任何修改。"