mall数据库文件
This commit is contained in:
247
mall_sql/deploy.sh
Normal file
247
mall_sql/deploy.sh
Normal file
@@ -0,0 +1,247 @@
|
||||
#!/bin/bash
|
||||
# ================================================================================
|
||||
# Mall SQL 自动部署脚本
|
||||
# ================================================================================
|
||||
# 用途:自动执行商城数据库脚本
|
||||
# 使用:./deploy.sh [选项]
|
||||
#
|
||||
# 选项:
|
||||
# --full 完整部署(删除重建)
|
||||
# --upgrade 增量升级
|
||||
# --check 仅检查数据库状态
|
||||
# --test 创建测试数据
|
||||
# --help 显示帮助
|
||||
# ================================================================================
|
||||
|
||||
set -e # 遇到错误立即退出
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 默认配置
|
||||
DB_HOST="${DB_HOST:-localhost}"
|
||||
DB_PORT="${DB_PORT:-5432}"
|
||||
DB_NAME="${DB_NAME:-akmon}"
|
||||
DB_USER="${DB_USER:-postgres}"
|
||||
SCHEMA_DIR="schemas"
|
||||
MIGRATION_DIR="migrations"
|
||||
TEST_DIR="tests"
|
||||
SUBSCRIPTION_DIR="subscription"
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 显示帮助
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Mall SQL 自动部署脚本
|
||||
|
||||
用法: $0 [选项]
|
||||
|
||||
选项:
|
||||
--full 完整部署(删除重建数据库)
|
||||
--upgrade 增量升级(保留现有数据)
|
||||
--check 检查数据库状态
|
||||
--test 创建测试数据
|
||||
--subscription 部署订阅系统
|
||||
--help 显示此帮助信息
|
||||
|
||||
环境变量:
|
||||
DB_HOST 数据库主机 (默认: localhost)
|
||||
DB_PORT 数据库端口 (默认: 5432)
|
||||
DB_NAME 数据库名称 (默认: akmon)
|
||||
DB_USER 数据库用户 (默认: postgres)
|
||||
|
||||
示例:
|
||||
# 完整部署
|
||||
$0 --full
|
||||
|
||||
# 增量升级
|
||||
$0 --upgrade
|
||||
|
||||
# 检查状态
|
||||
$0 --check
|
||||
|
||||
# 使用自定义数据库
|
||||
DB_HOST=prod.example.com DB_NAME=akmon_prod $0 --upgrade
|
||||
EOF
|
||||
}
|
||||
|
||||
# 检查数据库连接
|
||||
check_connection() {
|
||||
log_info "检查数据库连接..."
|
||||
|
||||
if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q' 2>/dev/null; then
|
||||
log_success "数据库连接成功"
|
||||
return 0
|
||||
else
|
||||
log_error "无法连接到数据库: $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行SQL文件
|
||||
execute_sql() {
|
||||
local sql_file=$1
|
||||
local description=$2
|
||||
|
||||
log_info "执行: $description"
|
||||
|
||||
if [ ! -f "$sql_file" ]; then
|
||||
log_error "文件不存在: $sql_file"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$sql_file"; then
|
||||
log_success "完成: $description"
|
||||
return 0
|
||||
else
|
||||
log_error "失败: $description"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查数据库状态
|
||||
check_database() {
|
||||
log_info "检查数据库状态..."
|
||||
execute_sql "$TEST_DIR/mall_database_check.sql" "数据库状态检查"
|
||||
}
|
||||
|
||||
# 完整部署
|
||||
deploy_full() {
|
||||
log_warning "=========================================="
|
||||
log_warning "完整部署将重建所有商城表!"
|
||||
log_warning "=========================================="
|
||||
read -p "确认继续? (yes/no): " confirm
|
||||
|
||||
if [ "$confirm" != "yes" ]; then
|
||||
log_info "已取消"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "开始完整部署..."
|
||||
|
||||
# 1. 完整数据库
|
||||
execute_sql "$SCHEMA_DIR/complete_mall_database.sql" "创建商城核心表"
|
||||
|
||||
# 2. 商品表补充
|
||||
execute_sql "$SCHEMA_DIR/product_database.sql" "创建商品补充表"
|
||||
|
||||
# 3. SEO和安全
|
||||
execute_sql "$SCHEMA_DIR/mall_seo_security.sql" "配置SEO和安全策略"
|
||||
|
||||
# 4. 订阅系统
|
||||
execute_sql "$SUBSCRIPTION_DIR/create_mall_subscription_tables.sql" "创建订阅表"
|
||||
execute_sql "$SUBSCRIPTION_DIR/subscription_guard_trigger.sql" "创建订阅触发器"
|
||||
execute_sql "$SUBSCRIPTION_DIR/subscription_rls_policies.sql" "创建订阅RLS策略"
|
||||
|
||||
log_success "完整部署完成!"
|
||||
log_info "接下来可以运行: $0 --test"
|
||||
}
|
||||
|
||||
# 增量升级
|
||||
deploy_upgrade() {
|
||||
log_info "开始增量升级..."
|
||||
|
||||
# 1. 先检查
|
||||
check_database
|
||||
|
||||
# 2. 执行升级
|
||||
execute_sql "$MIGRATION_DIR/mall_alter_upgrade.sql" "增量升级"
|
||||
|
||||
# 3. 验证
|
||||
execute_sql "$TEST_DIR/validation_test.sql" "数据完整性验证"
|
||||
|
||||
log_success "增量升级完成!"
|
||||
}
|
||||
|
||||
# 创建测试数据
|
||||
create_test_data() {
|
||||
log_info "创建测试数据..."
|
||||
|
||||
# 1. 先创建Auth用户
|
||||
execute_sql "$TEST_DIR/create_supabase_auth_users.sql" "创建测试用户"
|
||||
|
||||
# 2. 创建模拟数据
|
||||
execute_sql "$TEST_DIR/mock_data_insert.sql" "创建模拟数据"
|
||||
|
||||
# 3. 验证
|
||||
execute_sql "$TEST_DIR/verify_mock_data_fix.sql" "验证测试数据"
|
||||
|
||||
log_success "测试数据创建完成!"
|
||||
}
|
||||
|
||||
# 部署订阅系统
|
||||
deploy_subscription() {
|
||||
log_info "部署订阅系统..."
|
||||
|
||||
execute_sql "$SUBSCRIPTION_DIR/create_mall_subscription_tables.sql" "创建订阅表"
|
||||
execute_sql "$SUBSCRIPTION_DIR/subscription_guard_trigger.sql" "创建订阅触发器"
|
||||
execute_sql "$SUBSCRIPTION_DIR/subscription_rls_policies.sql" "创建订阅RLS策略"
|
||||
|
||||
log_success "订阅系统部署完成!"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo "=========================================="
|
||||
echo " Mall SQL 自动部署脚本"
|
||||
echo "=========================================="
|
||||
echo "数据库: $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 检查连接
|
||||
if ! check_connection; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 解析参数
|
||||
case "${1:-}" in
|
||||
--full)
|
||||
deploy_full
|
||||
;;
|
||||
--upgrade)
|
||||
deploy_upgrade
|
||||
;;
|
||||
--check)
|
||||
check_database
|
||||
;;
|
||||
--test)
|
||||
create_test_data
|
||||
;;
|
||||
--subscription)
|
||||
deploy_subscription
|
||||
;;
|
||||
--help|-h)
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
log_error "未知选项: ${1:-}"
|
||||
echo ""
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 运行主函数
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user