# Supabase 数据库初始化指南 本文档说明如何将 SQL 脚本导入到本地 Docker 部署的 Supabase 中。 ## 准备工作 确保你的 Supabase Docker 容器正在运行: ```bash docker ps --filter "name=supabase" ``` ## 方法一:通过 Supabase Studio (推荐) 1. **打开 Supabase Studio** 在浏览器中访问:http://localhost:54323 > 注意:如果是通过 Kong 代理,可能是 http://localhost:8000 2. **进入 SQL 编辑器** 点击左侧菜单的 **SQL Editor** 3. **执行建表脚本** - 新建一个 Query - 复制 `migrations/001_create_tables.sql` 的内容 - 点击 **Run** 执行 4. **执行种子数据脚本** - 新建另一个 Query - 复制 `migrations/002_seed_data.sql` 的内容 - 点击 **Run** 执行 5. **创建 Storage Bucket** - 点击左侧菜单的 **Storage** - 点击 **New bucket** - 输入名称:`avatars` - 勾选 **Public bucket** - 点击 **Create bucket** ## 方法二:通过命令行 (psql) 1. **连接到数据库** ```bash # 获取数据库连接信息 docker exec supabase-db env | grep POSTGRES # 连接数据库 (默认密码在 .env 文件中) docker exec -it supabase-db psql -U postgres -d postgres ``` 2. **执行 SQL 脚本** ```bash # 从容器外部执行 cat supabase/migrations/001_create_tables.sql | docker exec -i supabase-db psql -U postgres -d postgres cat supabase/migrations/002_seed_data.sql | docker exec -i supabase-db psql -U postgres -d postgres ``` ## 方法三:通过 Supabase API ```bash # 设置环境变量 SUPABASE_URL="http://localhost:8000" SERVICE_KEY="你的 service_role key" # 创建 Storage bucket curl -X POST "$SUPABASE_URL/storage/v1/bucket" \ -H "Authorization: Bearer $SERVICE_KEY" \ -H "Content-Type: application/json" \ -d '{ "id": "avatars", "name": "avatars", "public": true, "file_size_limit": 5242880, "allowed_mime_types": ["image/png", "image/jpeg", "image/webp", "image/gif"] }' ``` ## 验证数据 初始化完成后,可以在 Supabase Studio 中验证: 1. **Table Editor** - 查看表结构和数据 2. **API Docs** - 查看自动生成的 API 文档 ### 表结构说明 | 表名 | 说明 | |------|------| | `categories` | 分类筛选,用于 Discovery 页面 | | `tags` | 角色标签 | | `characters` | AI 角色信息,包含 AI 配置 | | `character_tags` | 角色-标签关联 | | `characters_with_tags` | 视图,包含完整的角色信息和标签 | ### 初始数据 - 7 个分类(全部、温柔治愈、主导强势、反差/猎奇、语音陪聊、场景扮演、会员限定) - 11 个标签 - 4 个示例角色(Eva-09, Commander V, Yuki, Secret X) ## 常见问题 ### Q: 执行 SQL 时提示权限不足? 确保使用 `postgres` 用户或具有足够权限的用户执行。 ### Q: 视图查询返回空数据? 检查 `characters` 表中的 `is_active` 字段是否为 `true`。 ### Q: Storage 上传失败? 确保已创建 `avatars` bucket 并设置为公开访问。