Supabase数据库模式技能Skill supabase-usage

此技能提供Supabase数据库的模式、认证、行级安全、表关系和查询最佳实践的指导,涵盖关键词如Supabase、数据库、Auth、RLS、查询模式,帮助开发者高效使用Supabase进行数据库操作和安全管理,适合后端开发和云服务应用。

Serverless 0 次安装 0 次浏览 更新于 3/16/2026

name: supabase-usage description: 当用户询问“查询Supabase”、“列出Supabase表”、“获取Supabase模式”、“搜索Supabase记录”、“检查Supabase数据库”、“Supabase认证”、“Supabase身份验证”、“RLS策略”、“行级安全”、“Supabase外键”、“表关系”、“Supabase连接”、“Supabase过滤”、“Supabase分页”,或需要指导Supabase数据库模式、认证流程、RLS策略或查询最佳实践时,应使用此技能。

Supabase数据库模式

处理Supabase数据库的模式,包括认证、行级安全、表关系和查询最佳实践。

概述

  • MCP工具: 查询和探索数据库结构
  • 认证: 用户管理、会话、认证表
  • 行级安全: 数据访问控制的策略模式
  • 表关系: 外键、连接、嵌套查询
  • 查询模式: 过滤、分页、性能

MCP工具

用于数据库探索的可用工具:

  • mcp__supabase__list_tables - 列出数据库中的所有表
  • mcp__supabase__get_table_schema - 获取特定表的模式
  • mcp__supabase__execute_sql - 运行只读SQL查询

工作流程:

  1. 使用 list_tables 了解数据库结构
  2. 使用 get_table_schema 检查列和类型
  3. 使用 execute_sql 进行自定义查询(只读)

最佳实践

  • ✓ 在所有公共表上启用RLS
  • ✓ 在RLS策略中使用 (select auth.uid()) 以提高性能
  • ✓ 在RLS检查的列上添加索引
  • ✓ 在策略中指定角色 TO authenticated
  • ✓ 对外键使用 on delete cascade 到 auth.users
  • ✓ 对大数据集使用基于游标的分页
  • ✓ 只选择需要的列: .select('id, name') 而不是 .select('*')

不做

  • ✗ 存储敏感数据时不使用RLS
  • ✗ 直接在策略中使用 auth.uid()(使用 (select auth.uid())
  • ✗ 创建策略时不指定角色
  • ✗ 忘记在频繁过滤的列上添加索引
  • ✗ 对深层页面(>1000行)使用偏移分页
  • ✗ 通过API直接暴露 auth.users(使用公共配置文件表)

快速参考

常见过滤器

过滤器 JavaScript Python
等于 .eq('col', val) .eq("col", val)
不等于 .neq('col', val) .neq("col", val)
大于 .gt('col', val) .gt("col", val)
大于或等于 .gte('col', val) .gte("col", val)
小于 .lt('col', val) .lt("col", val)
小于或等于 .lte('col', val) .lte("col", val)
模式匹配 .ilike('col', '%val%') .ilike("col", "%val%")
在列表中 .in('col', [a,b]) .in_("col", [a,b])
为空 .is('col', null) .is_("col", "null")
.or('a.eq.1,b.eq.2') .or_("a.eq.1,b.eq.2")

认证表快速参考

关键列
auth.users id, email, phone, created_at, last_sign_in_at, raw_user_meta_data
auth.sessions id, user_id, created_at, updated_at
auth.identities id, user_id, provider, identity_data

RLS策略模板

create policy "策略名称" on 表名
to authenticated  -- 或 anon, 或特定角色
for select        -- select, insert, update, delete, 或 all
using ( (select auth.uid()) = user_id )
with check ( (select auth.uid()) = user_id );  -- 用于 insert/update

附加资源

有关详细模式和代码示例,请参考:

  • references/auth.md - 使用JS/Python SDK进行认证,用户配置文件
  • references/rls.md - 行级安全策略和性能提示
  • references/relationships.md - 表关系和嵌套查询
  • references/query-patterns.md - 过滤、分页、计数、索引