232 lines
5.3 KiB
Markdown
232 lines
5.3 KiB
Markdown
# 商城数据库部署与测试完整指南
|
||
|
||
## 📋 部署前检查清单
|
||
|
||
### 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 安全策略
|
||
- ✅ 优化的索引结构
|
||
- ✅ 丰富的模拟测试数据
|
||
- ✅ 业务触发器和函数
|