# Analytics 测试数据快速开始（更新版）

> 本文档基于 **2026-01 修订后的数据库脚本**（含 RLS 安全、中文注释、幂等执行）
>
> 请务必按下述 **执行顺序** 依次运行 SQL，否则会出现外键或 RLS 限制导致的插入失败。

---

## 🗂️ SQL 执行顺序（只创建，不删除）

| 步骤 | 作用                                                                          | 文件                                    | 需要权限                                              |
| ---- | ----------------------------------------------------------------------------- | --------------------------------------- | ----------------------------------------------------- |
| 1    | 创建基础业务表（orders/users/user_sessions/products/merchants/page_views 等） | `01_create_tables.sql`                  | 任意（不清空数据，可重复执行）                        |
| 2    | 创建用户资料表（ak_users）+ RLS + 用户资料函数                                | `../../user/test/USER_AUTH_SCHEMA.sql`  | 任意（不清空数据，可重复执行）                        |
| 3    | 创建 auth.users → ak_users 触发器                                             | `../../user/test/USER_AUTH_TRIGGER.sql` | **需要访问 auth schema（建议 Dashboard SQL Editor）** |
| 4    | 创建 analytics_* 表 + RLS + RPC                                               | `ANALYTICS_DB_SCHEMA.sql`               | 任意（不清空数据，可重复执行）                        |
| 5    | 插入业务侧测试数据                                                            | `02_insert_test_data.sql`               | **service_role**¹                                     |
| 6    | 插入 analytics_* 测试数据                                                     | `ANALYTICS_TEST_SEED.sql`               | **service_role**¹                                     |
| 7    | (可选) 查询验证                                                               | `03_test_queries.sql`                   | 登录用户                                              |

¹ *原因：两份 seed 脚本要写入带 RLS 的表，直接用 anon / authenticated 会被策略拦截。Dashboard SQL Editor 默认具备等价于 postgres/service_role 的权限，可直接执行；CLI 请使用 `psql … -U postgres`（或你的 DB 管理员账号）执行。*

---

## 🚀 执行步骤（以 Supabase Dashboard 为例）

1. 打开 **SQL Editor** → 依次新建 Query 运行 *步骤1–4*。
2. 登出 / 使用普通账号登录，再运行 *步骤5* 查询验证。

---

## ⚠️ 常见问题

1. **RLS 阻挡插入**  
   请确认 seed 在 Dashboard 执行，或先 `SET ROLE service_role;`。  
   不建议在 seed 中禁用 RLS。

2. **重复执行报错**  
   脚本为“只创建，不删除”模式：表/索引使用 `IF NOT EXISTS`，触发器/策略使用系统表判断后再创建，可重复执行。若仍报错，请先 `ROLLBACK;` 再重试。

3. **前端查不到 seed 数据**  
   登陆用户的 `auth.uid()`必须与 seed 中 `orders.user_id` 等字段匹配；否则受 RLS 影响会看不到。测试时可在 seed 中把某条 `user_id` 改成你自己的 UID。

---

## 🔐 权限矩阵（简版）

| 表 / 功能                              | anon              | authenticated       | service_role |
| -------------------------------------- | ----------------- | ------------------- | ------------ |
| `orders / order_items / user_sessions` | Insert❌ / Select❌ | ✅(仅本人)           | ✅(全部)      |
| `products / merchants`                 | Select✅           | CRUD⚠️ (受策略)      | ✅            |
| `page_views`                           | Insert✅ / Select❌ | Select✅(本人)       | ✅            |
| `analytics_*` 表                       | ❌                 | ✅ (按 owner/shared) | ✅            |
| RPC (analytics)                        | ❌                 | ✅                   | ✅            |

> 详细策略请见各 SQL 文件内注释。

---

## 🧹 清理

执行 `04_cleanup.sql` 可按时间 / 用户删除测试数据，脚本已更新为幂等。

---

最后更新：2026-01-26
