# 商城数据库部署与测试完整指南 ## 📋 部署前检查清单 ### 1. 环境要求 - PostgreSQL 13+ 或 Supabase 项目 - 具有数据库创建权限的账户 - 已安装必要扩展的权限 ### 2. 必要扩展 ```sql -- 在执行任何脚本前,确保这些扩展已安装 CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pgcrypto"; ``` ### 3. 现有表检查 如果您的项目中已有 `ak_users` 表,请确保: - `auth_id` 字段类型为 `uuid`(不是 `text`) - 表结构包含必要的字段:`id`, `username`, `email`, `phone`, `auth_id`, `avatar_url`, `gender`, `created_at` ## 🚀 部署步骤 ### 步骤 1: 验证环境 ```bash # 执行验证脚本 psql -d your_database -f validation_test.sql ``` ### 步骤 2: 创建完整数据库结构 ```bash # 执行主数据库脚本 psql -d your_database -f complete_mall_database.sql ``` ### 步骤 3: 插入模拟数据 ```bash # 执行模拟数据脚本 psql -d your_database -f mock_data_insert.sql ``` ### 步骤 4: 验证部署结果 ```bash # 再次执行验证脚本确认 psql -d your_database -f validation_test.sql ``` ## 🔧 Supabase 部署 ### 在 Supabase Dashboard 中部署 1. **登录 Supabase Dashboard** - 打开 [supabase.com](https://supabase.com) - 选择您的项目 2. **SQL Editor 部署** ```sql -- 1. 首先安装扩展 CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pgcrypto"; -- 2. 复制粘贴 complete_mall_database.sql 内容并执行 -- 3. 复制粘贴 mock_data_insert.sql 内容并执行 ``` 3. **验证 RLS 策略** - 在 Authentication > Policies 中查看策略 - 确认所有 `ml_*` 表都有相应的 RLS 策略 ## 📊 部署验证 ### 数据完整性检查 ```sql -- 检查所有主要表的数据量 SELECT 'ak_users' as table_name, COUNT(*) as record_count FROM public.ak_users UNION ALL SELECT 'ml_user_profiles', COUNT(*) FROM public.ml_user_profiles UNION ALL SELECT 'ml_merchants', COUNT(*) FROM public.ml_merchants UNION ALL SELECT 'ml_categories', COUNT(*) FROM public.ml_categories UNION ALL SELECT 'ml_products', COUNT(*) FROM public.ml_products UNION ALL SELECT 'ml_orders', COUNT(*) FROM public.ml_orders UNION ALL SELECT 'ml_reviews', COUNT(*) FROM public.ml_reviews ORDER BY table_name; ``` ### 权限验证 ```sql -- 检查 RLS 是否正确启用 SELECT schemaname, tablename, rowsecurity FROM pg_tables WHERE tablename LIKE 'ml_%' ORDER BY tablename; ``` ### 功能测试 ```sql -- 测试用户认证相关查询 SELECT u.username, up.real_name, up.gender FROM public.ak_users u LEFT JOIN public.ml_user_profiles up ON u.id = up.user_id WHERE u.username IN ('customer1', 'merchant1') LIMIT 5; -- 测试商品数据 SELECT p.name, p.price, c.name as category, m.name as merchant FROM public.ml_products p JOIN public.ml_categories c ON p.category_id = c.id JOIN public.ml_merchants m ON p.merchant_id = m.id LIMIT 5; ``` ## ⚠️ 常见问题解决 ### 问题 1: UUID 扩展未安装 ``` ERROR: function uuid_generate_v4() does not exist ``` **解决方案:** ```sql CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; ``` ### 问题 2: auth_id 类型不匹配 ``` ERROR: column "auth_id" is of type uuid but expression is of type text ``` **解决方案:** 确保 `ak_users` 表中 `auth_id` 字段类型为 `uuid`: ```sql -- 检查当前类型 SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'auth_id'; -- 如果是 text 类型,需要转换 ALTER TABLE public.ak_users ALTER COLUMN auth_id TYPE uuid USING auth_id::uuid; ``` ### 问题 3: RLS 策略创建失败 ``` ERROR: policy "xxx" for table "yyy" already exists ``` **解决方案:** ```sql -- 删除现有策略后重新创建 DROP POLICY IF EXISTS policy_name ON table_name; ``` ### 问题 4: 权限不足 ``` ERROR: permission denied for relation ak_users ``` **解决方案:** 确保当前用户具有足够权限,或在 Supabase 中使用 Service Role Key。 ## 📈 性能优化建议 ### 1. 索引检查 ```sql -- 查看重要表的索引 SELECT tablename, indexname, indexdef FROM pg_indexes WHERE tablename LIKE 'ml_%' ORDER BY tablename, indexname; ``` ### 2. 查询优化 - 商品列表查询使用 `ml_products_search_idx` 索引 - 订单查询使用 `ml_orders_user_status_idx` 索引 - 用户行为分析使用 `ml_user_behavior_user_time_idx` 索引 ### 3. 监控要点 - 订单表增长速度 - 用户行为日志大小 - 图片存储用量 ## 🔄 数据维护 ### 定期清理 ```sql -- 清理过期的购物车项目(30天前) DELETE FROM public.ml_shopping_cart WHERE created_at < NOW() - INTERVAL '30 days'; -- 清理过期的优惠券 UPDATE public.ml_coupons SET status = 'expired' WHERE end_date < NOW() AND status = 'active'; ``` ### 备份建议 - 每日备份核心业务表:`ml_orders`, `ml_order_items`, `ml_products` - 每周全量备份 - 重要操作前手动备份 ## 📞 技术支持 如果在部署过程中遇到问题,请检查: 1. PostgreSQL 版本兼容性 2. 扩展安装权限 3. 表结构完整性 4. RLS 策略语法 部署成功后,您的商城数据库将包含: - ✅ 18 个核心业务表 - ✅ 完整的 RLS 安全策略 - ✅ 优化的索引结构 - ✅ 丰富的模拟测试数据 - ✅ 业务触发器和函数