275 lines
6.8 KiB
Markdown
275 lines
6.8 KiB
Markdown
# SQL 测试脚本使用指南
|
||
|
||
本指南说明如何在内网 Supabase 环境中执行测试 SQL 脚本。
|
||
|
||
## 📋 目录结构
|
||
|
||
```
|
||
pages/mall/analytics/test/
|
||
├── 01_create_tables.sql # 创建表结构
|
||
├── 02_insert_test_data.sql # 插入测试数据
|
||
├── 03_test_queries.sql # 测试查询
|
||
├── 04_cleanup.sql # 清理数据
|
||
└── SQL_USAGE_GUIDE.md # 本指南
|
||
```
|
||
|
||
## 🚀 执行方式
|
||
|
||
### 方式 1: 通过 Supabase Dashboard(推荐)
|
||
|
||
如果您的内网 Supabase 有 Dashboard 界面:
|
||
|
||
1. **打开 Supabase Studio / Dashboard**
|
||
- 使用你自己的部署地址访问(不要在仓库文档里硬编码地址/账号/密码)。
|
||
|
||
2. **打开 SQL Editor**
|
||
- 在左侧菜单找到 "SQL Editor" 或 "SQL"
|
||
- 点击 "New Query"
|
||
|
||
4. **执行脚本**
|
||
- 复制 `01_create_tables.sql` 的内容
|
||
- 粘贴到 SQL Editor
|
||
- 点击 "Run" 或按 `Ctrl+Enter`
|
||
- 等待执行完成
|
||
|
||
5. **依次执行其他脚本**
|
||
- 执行 `02_insert_test_data.sql`(插入测试数据)
|
||
- 执行 `03_test_queries.sql`(验证数据,可选)
|
||
|
||
### 方式 2: 通过 PostgreSQL 客户端(psql)
|
||
|
||
如果 Dashboard 不可用,可以直接连接 PostgreSQL:
|
||
|
||
1. **连接数据库**
|
||
```bash
|
||
# 使用 psql 连接
|
||
psql -h <DB_HOST> -p <DB_PORT> -U postgres -d postgres
|
||
|
||
# 密码请按你的环境输入/从安全渠道获取(不要写进仓库)
|
||
```
|
||
|
||
2. **执行 SQL 文件**
|
||
```sql
|
||
-- 在 psql 中执行
|
||
\i /path/to/01_create_tables.sql
|
||
\i /path/to/02_insert_test_data.sql
|
||
\i /path/to/03_test_queries.sql
|
||
```
|
||
|
||
或者直接复制粘贴 SQL 内容到 psql 中执行。
|
||
|
||
### 方式 3: 通过 DBeaver / pgAdmin 等图形工具
|
||
|
||
1. **创建新连接**
|
||
- 主机:`<DB_HOST>`
|
||
- 端口:`<DB_PORT>`
|
||
- 数据库:`postgres`
|
||
- 用户名:`postgres`
|
||
- 密码:`<DB_PASSWORD>`
|
||
|
||
2. **执行 SQL**
|
||
- 打开 SQL 编辑器
|
||
- 复制 SQL 文件内容
|
||
- 执行脚本
|
||
|
||
> 不建议通过 HTTP API “执行任意 SQL”(高风险)。
|
||
> 如需服务端能力,请用 Supabase Edge Functions + 限定输入输出的 RPC。
|
||
|
||
## 📝 执行顺序
|
||
|
||
**重要:必须按顺序执行!**
|
||
|
||
> ✅ 以 `ANALYTICS_DATA_QUICK_START.md` 为权威执行顺序与权限说明(本文件只做执行方式补充)。
|
||
|
||
1. ✅ **第一步:创建表结构**
|
||
```sql
|
||
-- 执行 01_create_tables.sql
|
||
-- 这会创建所有需要的表和索引
|
||
```
|
||
|
||
2. ✅ **第二步:插入测试数据**
|
||
```sql
|
||
-- 执行 02_insert_test_data.sql
|
||
-- 这会插入测试用户、订单、会话等数据
|
||
```
|
||
|
||
3. ✅ **第三步:验证数据(可选)**
|
||
```sql
|
||
-- 执行 03_test_queries.sql
|
||
-- 验证数据是否正确插入,查看统计信息
|
||
```
|
||
|
||
4. ⚠️ **清理数据(需要时)**
|
||
```sql
|
||
-- 执行 04_cleanup.sql
|
||
-- 谨慎使用:会删除测试数据
|
||
```
|
||
|
||
## 🔍 验证执行结果
|
||
|
||
### 检查表是否创建成功
|
||
|
||
```sql
|
||
-- 查看所有表
|
||
SELECT table_name
|
||
FROM information_schema.tables
|
||
WHERE table_schema = 'public'
|
||
ORDER BY table_name;
|
||
|
||
-- 应该看到:
|
||
-- orders
|
||
-- user_sessions
|
||
-- users
|
||
-- products (可选)
|
||
-- order_items (可选)
|
||
-- page_views (可选)
|
||
```
|
||
|
||
### 检查数据是否插入成功
|
||
|
||
```sql
|
||
-- 检查用户数量
|
||
SELECT COUNT(*) FROM users;
|
||
-- 应该返回 8
|
||
|
||
-- 检查订单数量
|
||
SELECT COUNT(*) FROM orders WHERE created_at >= DATE_TRUNC('day', NOW());
|
||
-- 应该返回 15(今日订单)
|
||
|
||
-- 检查在线用户
|
||
SELECT COUNT(*) FROM user_sessions
|
||
WHERE last_active_at >= NOW() - INTERVAL '5 minutes' AND is_active = true;
|
||
-- 应该返回 5
|
||
```
|
||
|
||
### 检查实时大屏数据
|
||
|
||
```sql
|
||
-- 执行 03_test_queries.sql 中的综合查询
|
||
-- 应该能看到:
|
||
-- - 实时GMV: 约 3,500 元
|
||
-- - 实时订单: 15 笔
|
||
-- - 在线用户: 5 人
|
||
-- - 转化率: 约 50-80%
|
||
```
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
### 1. 权限问题
|
||
|
||
如果遇到权限错误:
|
||
```sql
|
||
-- 确保 postgres 用户有足够权限
|
||
GRANT ALL PRIVILEGES ON DATABASE postgres TO postgres;
|
||
GRANT ALL PRIVILEGES ON SCHEMA public TO postgres;
|
||
```
|
||
|
||
### 2. 表已存在
|
||
|
||
如果表已存在:
|
||
- `01_create_tables.sql` / `ANALYTICS_DB_SCHEMA.sql` 现为 **只创建(Create-only)** 脚本,不包含 `DROP/DELETE/TRUNCATE`,可重复执行且不会清空数据。
|
||
- 如需结构变更,请用迁移脚本(ALTER TABLE)。
|
||
|
||
> 如确实要“清理后重建”,请另外单独维护清理脚本(避免把破坏性操作放进默认文档/默认流程)。
|
||
|
||
### 3. 时间依赖
|
||
|
||
测试数据使用 `NOW()` 函数,每次执行都会基于当前时间生成。
|
||
- 今日订单:基于当前日期
|
||
- 昨日订单:当前时间往前推 24 小时
|
||
- 在线用户:最近 5 分钟内有活动
|
||
|
||
### 4. UUID 冲突
|
||
|
||
如果重复执行插入脚本,由于使用了 `ON CONFLICT DO NOTHING`,不会产生重复数据。
|
||
但如果需要重新插入,先执行清理脚本。
|
||
|
||
## 🐛 常见问题
|
||
|
||
### Q1: 连接被拒绝
|
||
```
|
||
Error: connection refused
|
||
```
|
||
**解决:**
|
||
- 检查 Supabase 服务是否运行
|
||
- 检查防火墙设置
|
||
- 确认端口 5432 是否开放
|
||
|
||
### Q2: 认证失败
|
||
```
|
||
Error: password authentication failed
|
||
```
|
||
**解决:**
|
||
- 确认密码是否正确:`yxyHINygZMLSq9jLddrZQBB-CoyGHSF5DwlwWmbrYXc`
|
||
- 检查用户名是否为 `postgres`
|
||
|
||
### Q3: 表已存在错误
|
||
```
|
||
Error: relation "orders" already exists
|
||
```
|
||
**解决:**
|
||
- 说明你执行的脚本版本与当前仓库不一致,或只拷贝了部分 SQL
|
||
- 请按 `ANALYTICS_DATA_QUICK_START.md` 的顺序完整执行最新脚本(Drop-first,不应出现该错误)
|
||
|
||
### Q4: 权限不足
|
||
```
|
||
Error: permission denied
|
||
```
|
||
**解决:**
|
||
- 使用 postgres 超级用户执行
|
||
- 或授予相应权限
|
||
|
||
## 📊 执行后的预期结果
|
||
|
||
执行完所有脚本后,您应该能看到:
|
||
|
||
1. **数据库表**
|
||
- 6 个表已创建(orders, user_sessions, users, products, order_items, page_views)
|
||
- 所有索引已创建
|
||
|
||
2. **测试数据**
|
||
- 8 个测试用户
|
||
- 15 个今日订单
|
||
- 10 个昨日订单
|
||
- 5 个在线用户会话
|
||
- 15 条访问日志
|
||
|
||
3. **实时大屏显示**
|
||
- 在数据分析页面应该能看到实时数据
|
||
- GMV、订单数、在线用户、转化率都有值
|
||
|
||
## 🔄 重新执行
|
||
|
||
如果需要重新生成测试数据:
|
||
|
||
1. **清理数据**
|
||
```sql
|
||
-- 执行 04_cleanup.sql
|
||
```
|
||
|
||
2. **重新插入**
|
||
```sql
|
||
-- 执行 02_insert_test_data.sql
|
||
```
|
||
|
||
## 📞 获取帮助
|
||
|
||
如果遇到问题:
|
||
|
||
1. 检查 Supabase 日志
|
||
2. 查看数据库连接状态
|
||
3. 验证配置文件 `ak/config.uts` 是否正确
|
||
4. 使用测试页面验证连接:`/pages/mall/analytics/test/test-connection`
|
||
|
||
## 🎯 快速开始
|
||
|
||
**最简单的执行方式:**
|
||
|
||
1. 打开 Supabase Dashboard(如果有)
|
||
2. 进入 SQL Editor
|
||
3. 复制 `01_create_tables.sql` 内容,执行
|
||
4. 复制 `02_insert_test_data.sql` 内容,执行
|
||
5. 完成!
|
||
|
||
现在可以开始测试实时大屏功能了!🎉
|