# PostgreSQL 没有 `min(uuid)` / `max(uuid)` 聚合函数

**日期**: 2026-05-16
**触发**: dashboard `sessionStats` 用 `MIN(user_id)` 在 GROUP BY session_id 时取代表 user_id，运行时 500 错。

## 错误信息

```
Raw query failed. Code: 42883. Message:
ERROR: function min(uuid) does not exist
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
```

## 根因

PG 内置 `min` / `max` 只在可比较类型上重载（数值 / 文本 / 时间）。`uuid` 没有内建 `min/max` 聚合，因为 uuid 的"大小"语义对业务无意义（v4 是随机的）。

## 修复

`MIN(user_id::text)` —— 显式 cast 成 text，PG 就有 `min(text)`。事后用 string 当 uuid 串用即可（应用层 Prisma 不会 type-check 这种 raw 返回值）。

## 适用场景

任何 `GROUP BY <某 dim>` + 想"顺便带一个 uuid 列回来"的 raw SQL：

- 错：`SELECT MIN(user_id) FROM ... GROUP BY session_id`
- 对：`SELECT MIN(user_id::text) FROM ... GROUP BY session_id`

更"语义化"的替代是 `(array_agg(user_id))[1]`，但 cast text 更短且足够（同一 session 内 user_id 是常量）。

## 验证

L1 case 11 + 16（session-stats）：cast 前 500，cast 后 200 通过。
