5.2 KiB
5.2 KiB
测试数据插入指南
本文档说明如何在启用 RLS(行级安全策略)的情况下插入测试数据。
📋 前置条件
-
已执行表结构创建脚本
01_create_tables.sql- 创建表结构和 RLS 策略ANALYTICS_DB_SCHEMA.sql- 创建 analytics_* 表(可选)
-
确认 Supabase 连接
- 已配置 Supabase 项目
- 可以访问 Supabase Dashboard 的 SQL Editor
🚀 插入测试数据的三种方式
方式一:使用 Supabase Dashboard(推荐)
优点:最简单,无需处理 RLS 权限问题
适用场景:开发测试、快速验证
步骤:
- 打开 Supabase Dashboard
- 进入 SQL Editor
- 复制
02_insert_test_data.sql的全部内容 - 粘贴到 SQL Editor 中
- 点击 Run 执行
说明:Supabase Dashboard 的 SQL Editor 默认使用 service_role 权限,可以绕过 RLS 策略,直接插入数据。
方式二:临时禁用 RLS(适用于命令行)
优点:可以在命令行或脚本中执行
适用场景:自动化脚本、CI/CD
步骤(不推荐,除非你明确理解风险):
- 编辑
02_insert_test_data.sql - 取消文件开头关于禁用 RLS 的注释(第 12-19 行)
- 取消文件末尾关于重新启用 RLS 的注释(第 137-144 行)
- 执行脚本
示例:
-- 在脚本开头添加
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
适用场景:生产环境、需要定期插入测试数据
步骤:
- 创建一个 SECURITY DEFINER 函数来插入测试数据
- 调用该函数执行插入
示例函数:
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();
✅ 验证数据插入
执行以下查询验证数据是否插入成功:
-- 检查用户数量
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 策略限制了查询权限。
解决方案:
- 确认前端已正确登录(
auth.uid()不为 NULL) - 检查 RLS 策略是否正确配置
- 确认测试数据的
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 表结构(可选)
📚 下一步
插入测试数据后,可以:
-
验证前端页面
- 访问
/pages/mall/analytics/index查看实时大屏 - 检查 KPI 数据是否正确显示
- 访问
-
执行验证查询
- 运行
03_test_queries.sql验证数据计算逻辑
- 运行
-
测试 RPC 函数
- 调用
rpc_analytics_realtime_kpis验证实时 KPI 计算
- 调用