5.2 KiB
5.2 KiB
商城数据库快速部署指南
🚀 快速开始
第一步:创建数据库结构
-- 执行主数据库脚本
\i complete_mall_database.sql
第二步:插入测试数据
-- 执行模拟数据脚本
\i mock_data_insert.sql
📋 执行顺序
- complete_mall_database.sql - 创建完整的数据库结构
- mock_data_insert.sql - 插入测试数据(可选)
🔧 PostgreSQL 执行方式
方式一:psql 命令行
# 连接数据库
psql -h localhost -U your_username -d your_database
# 执行脚本
\i /path/to/complete_mall_database.sql
\i /path/to/mock_data_insert.sql
方式二:直接执行
psql -h localhost -U your_username -d your_database -f complete_mall_database.sql
psql -h localhost -U your_username -d your_database -f mock_data_insert.sql
☁️ Supabase 执行方式
SQL Editor 执行
- 登录 Supabase Dashboard
- 进入 SQL Editor
- 复制粘贴
complete_mall_database.sql内容 - 点击 Run 执行
- 重复步骤执行
mock_data_insert.sql
注意事项
- Supabase 可能需要分段执行大型脚本
- 确保有足够的权限创建扩展和表
🧪 测试验证
验证数据库结构
-- 检查表是否创建成功
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name LIKE 'ml_%'
ORDER BY table_name;
-- 检查用户数据
SELECT COUNT(*) as user_count FROM public.ak_users;
SELECT COUNT(*) as profile_count FROM public.ml_user_profiles;
验证测试数据
-- 检查商品数据
SELECT COUNT(*) as product_count FROM public.ml_products;
SELECT COUNT(*) as sku_count FROM public.ml_product_skus;
-- 检查订单数据
SELECT COUNT(*) as order_count FROM public.ml_orders;
SELECT COUNT(*) as order_item_count FROM public.ml_order_items;
-- 检查用户角色分布
SELECT
user_type,
COUNT(*) as count,
CASE
WHEN user_type = 1 THEN '消费者'
WHEN user_type = 2 THEN '商家'
WHEN user_type = 3 THEN '配送员'
WHEN user_type = 4 THEN '客服'
WHEN user_type = 5 THEN '管理员'
END as role_name
FROM public.ml_user_profiles
GROUP BY user_type;
🎯 测试用户登录信息
管理员
- 用户名: admin
- 邮箱: admin@mall.com
商家
- 商家1: merchant1 / merchant1@mall.com
- 商家2: merchant2 / merchant2@mall.com
消费者
- 用户1: customer1 / customer1@mall.com
- 用户2: customer2 / customer2@mall.com
- 用户3: customer3 / customer3@mall.com
配送员
- 配送员1: driver1 / driver1@mall.com
- 配送员2: driver2 / driver2@mall.com
🔐 权限说明
RLS (Row Level Security) 策略
- 已为所有用户数据表启用RLS
- 用户只能访问自己的数据
- 商家可以管理自己的商品和订单
- 详细权限请查看
complete_mall_database.sql
测试权限
-- 验证RLS策略
SET ROLE authenticated;
SET session.user_id = 'user-uuid-here';
-- 测试用户数据访问
SELECT * FROM public.ml_user_profiles;
SELECT * FROM public.ml_shopping_cart;
📊 性能优化验证
索引检查
-- 检查索引创建情况
SELECT
schemaname,
tablename,
indexname,
indexdef
FROM pg_indexes
WHERE schemaname = 'public'
AND tablename LIKE 'ml_%'
ORDER BY tablename, indexname;
查询性能测试
-- 测试商品搜索性能
EXPLAIN ANALYZE
SELECT * FROM public.ml_products
WHERE status = 1
AND name ILIKE '%iPhone%'
ORDER BY created_at DESC
LIMIT 20;
-- 测试用户订单查询性能
EXPLAIN ANALYZE
SELECT * FROM public.ml_orders
WHERE user_id = 'some-user-id'
ORDER BY created_at DESC
LIMIT 10;
🚨 常见问题
1. 扩展创建失败
ERROR: permission denied to create extension "uuid-ossp"
解决方案: 确保数据库用户有 SUPERUSER 权限或请求管理员创建扩展
2. RLS策略错误
ERROR: syntax error at or near ","
解决方案: 确保使用的是修正后的 complete_mall_database.sql 脚本
3. 模拟数据插入失败
ERROR: insert or update on table violates foreign key constraint
解决方案: 确保先执行 complete_mall_database.sql 创建表结构
4. Supabase 脚本执行超时
解决方案: 将大型脚本分段执行,或在本地执行后同步
🔄 数据更新
清理测试数据
-- 清理模拟数据(保留表结构)
TRUNCATE TABLE public.ml_product_reviews CASCADE;
TRUNCATE TABLE public.ml_order_items CASCADE;
TRUNCATE TABLE public.ml_orders CASCADE;
TRUNCATE TABLE public.ml_shopping_cart CASCADE;
-- ... 其他表
重新插入数据
-- 重新执行模拟数据脚本
\i mock_data_insert.sql
📝 部署检查清单
- 数据库连接正常
- 扩展创建成功 (uuid-ossp, pg_stat_statements, btree_gin)
- 所有表创建成功 (21张 ml_ 表)
- 索引创建成功 (30+ 个索引)
- 触发器创建成功 (8个触发器)
- 函数创建成功 (10+ 个函数)
- 视图创建成功 (3个视图)
- RLS策略启用成功
- 测试数据插入成功
- 权限验证通过
- 性能测试通过
部署完成后建议: 运行基本的API测试,验证所有功能模块正常工作。