# 测试数据插入指南 > 本文档说明如何在启用 RLS(行级安全策略)的情况下插入测试数据。 ## 📋 前置条件 1. **已执行表结构创建脚本** - `01_create_tables.sql` - 创建表结构和 RLS 策略 - `ANALYTICS_DB_SCHEMA.sql` - 创建 analytics_* 表(可选) 2. **确认 Supabase 连接** - 已配置 Supabase 项目 - 可以访问 Supabase Dashboard 的 SQL Editor ## 🚀 插入测试数据的三种方式 ### 方式一:使用 Supabase Dashboard(推荐) **优点**:最简单,无需处理 RLS 权限问题 **适用场景**:开发测试、快速验证 **步骤**: 1. 打开 Supabase Dashboard 2. 进入 **SQL Editor** 3. 复制 `02_insert_test_data.sql` 的全部内容 4. 粘贴到 SQL Editor 中 5. 点击 **Run** 执行 **说明**:Supabase Dashboard 的 SQL Editor 默认使用 `service_role` 权限,可以绕过 RLS 策略,直接插入数据。 --- ### 方式二:临时禁用 RLS(适用于命令行) **优点**:可以在命令行或脚本中执行 **适用场景**:自动化脚本、CI/CD **步骤**(不推荐,除非你明确理解风险): 1. 编辑 `02_insert_test_data.sql` 2. 取消文件开头关于禁用 RLS 的注释(第 12-19 行) 3. 取消文件末尾关于重新启用 RLS 的注释(第 137-144 行) 4. 执行脚本 **示例**: ```sql -- 在脚本开头添加 BEGIN; ALTER TABLE orders DISABLE ROW LEVEL SECURITY; ALTER TABLE user_sessions DISABLE ROW LEVEL SECURITY; -- ... 其他表 -- 插入数据... -- 在脚本末尾添加 ALTER TABLE orders ENABLE ROW LEVEL SECURITY; ALTER TABLE user_sessions ENABLE ROW LEVEL SECURITY; -- ... 其他表 COMMIT; ``` **⚠️ 注意**:执行完成后务必重新启用 RLS,否则数据将不受保护! --- ### 方式三:使用 SECURITY DEFINER 函数(高级) **优点**:更安全,不需要禁用 RLS **适用场景**:生产环境、需要定期插入测试数据 **步骤**: 1. 创建一个 SECURITY DEFINER 函数来插入测试数据 2. 调用该函数执行插入 **示例函数**: ```sql CREATE OR REPLACE FUNCTION insert_test_data() RETURNS void LANGUAGE plpgsql SECURITY DEFINER SET search_path = public AS $$ BEGIN -- 插入测试用户 INSERT INTO users (id, phone, email, nickname, last_login_at) VALUES ('11111111-1111-1111-1111-111111111111', '13800000001', 'user1@test.com', '测试用户1', NOW() - INTERVAL '2 minutes') ON CONFLICT (id) DO NOTHING; -- 插入其他测试数据... END; $$; -- 执行函数 SELECT insert_test_data(); ``` --- ## ✅ 验证数据插入 执行以下查询验证数据是否插入成功: ```sql -- 检查用户数量 SELECT COUNT(*) FROM users; -- 预期:8 -- 检查订单数量 SELECT COUNT(*) FROM orders; -- 预期:25(15个今日订单 + 10个昨日订单) -- 检查用户会话数量 SELECT COUNT(*) FROM user_sessions; -- 预期:10 -- 检查访问日志数量 SELECT COUNT(*) FROM page_views; -- 预期:15 -- 检查商家数量 SELECT COUNT(*) FROM merchants; -- 预期:2 -- 检查商品数量 SELECT COUNT(*) FROM products; -- 预期:3 ``` --- ## 🔍 常见问题 ### Q1: 执行 INSERT 时提示 "new row violates row-level security policy" **原因**:RLS 策略阻止了插入操作。 **解决方案**: - 使用方式一(Supabase Dashboard) - 或使用方式二(临时禁用 RLS) - 或使用方式三(SECURITY DEFINER 函数) ### Q2: 插入数据后,前端查询不到数据 **原因**:RLS 策略限制了查询权限。 **解决方案**: 1. 确认前端已正确登录(`auth.uid()` 不为 NULL) 2. 检查 RLS 策略是否正确配置 3. 确认测试数据的 `user_id` 与登录用户的 `auth.uid()` 匹配 ### Q3: 如何清空测试数据重新插入? 为避免在默认文档里包含破坏性 SQL,本项目将“清理/删除”动作放在独立清理脚本中(如 `04_cleanup.sql`)。 如你需要重新生成测试数据: - 先执行清理脚本 - 再重新执行 seed 脚本 --- ## 📝 测试数据说明 ### 用户数据 - **数量**:8 个测试用户 - **UUID 范围**:`11111111-...` 到 `88888888-...` - **用途**:用于订单、会话、访问日志等关联数据 ### 订单数据 - **今日订单**:15 笔(status = 2,已支付) - **昨日订单**:10 笔(用于增长率对比) - **总 GMV**:约 3,500 元(今日) ### 在线用户 - **最近 5 分钟活跃**:5 个用户 - **用于**:实时大屏的"在线用户"统计 ### 访问日志 - **数量**:15 条 - **来源分布**:direct/search/social/ad - **用于**:转化率计算、流量来源分析 --- ## 🔗 相关文件 - `01_create_tables.sql` - 表结构创建脚本 - `02_insert_test_data.sql` - 测试数据插入脚本 - `03_test_queries.sql` - 数据验证查询脚本 - `ANALYTICS_DB_SCHEMA.sql` - Analytics 表结构(可选) --- ## 📚 下一步 插入测试数据后,可以: 1. **验证前端页面** - 访问 `/pages/mall/analytics/index` 查看实时大屏 - 检查 KPI 数据是否正确显示 2. **执行验证查询** - 运行 `03_test_queries.sql` 验证数据计算逻辑 3. **测试 RPC 函数** - 调用 `rpc_analytics_realtime_kpis` 验证实时 KPI 计算