Files
akmon/doc_mall/database/deployment_guide.md
2026-01-20 08:04:15 +08:00

5.2 KiB
Raw Permalink Blame History

商城数据库快速部署指南

🚀 快速开始

第一步:创建数据库结构

-- 执行主数据库脚本
\i complete_mall_database.sql

第二步:插入测试数据

-- 执行模拟数据脚本
\i mock_data_insert.sql

📋 执行顺序

  1. complete_mall_database.sql - 创建完整的数据库结构
  2. 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 执行

  1. 登录 Supabase Dashboard
  2. 进入 SQL Editor
  3. 复制粘贴 complete_mall_database.sql 内容
  4. 点击 Run 执行
  5. 重复步骤执行 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;

🎯 测试用户登录信息

管理员

商家

消费者

配送员

🔐 权限说明

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测试验证所有功能模块正常工作。