用途 本技能面向使用 Supabase 的开发者,用于管理各套餐层级的速率限制与配额,覆盖 PostgREST、Auth、Storage、Realtime 和 Edge Functions 等 API 界面。适用于遇到 429 错误、配置连接池、优化 API 吞吐量等场景,目标是让应用保持在配额之内,并优雅地处理 429 错误。
前提条件 需要活跃的 Supabase 项目(任意套餐)、已安装 @supabase/supabase-js v2+、可用的项目 URL 与 anon/service-role 密钥,以及 Node.js 18+ 或等效运行时。
主要能力 技能给出各界面、各套餐的精确限制数值。API 层面的主要指标为:每分钟请求数(RPM)Free 500、Pro 5,000、Enterprise 不限(自定义);每日请求数(RPD)Free 50,000、Pro 1,000,000、Enterprise 不限(自定义)。Auth、Storage、Realtime、Edge Functions 与数据库连接各自带有独立配额。技能还提供基于 Supavisor 的连接池模式选择、重试与退避、分页与批量等降低请求量的模式,以及仪表盘监控配置。
使用方式(连接池) Supavisor 是 Supabase 内置的连接池(取代 PgBouncer),按工作负载选择模式:无服务器 / Edge Functions 使用 Transaction 模式、端口 6543;Next.js API 路由使用 Transaction 模式、端口 6543;长运行 worker 使用 Session 模式、端口 5432;Realtime 订阅使用直连(不经池化)、端口 5432;Prisma / Drizzle ORM 使用 Transaction 模式加 ?pgbouncer=true、端口 6543。Transaction 模式(端口 6543)在每个事务后把连接归还到池,是无服务器场景的合适默认值;Session 模式(端口 5432)为 LISTEN/NOTIFY 与预处理语句保持专用连接。
使用方式(重试、分页与批量) 可将查询包装进指数退避重试,识别 429 与连接池耗尽。资料给出的判断条件为:错误是速率限制、"too many requests"、代码 429 或 PGRST000(连接池耗尽)时可重试;每次尝试延迟翻倍并加抖动,上限为 maxDelayMs,同时遵循 Retry-After。示例代码: const users = await withRetry(() => supabase.from('users').select('id, email, created_at').eq('active', true) ) 降低请求量有两种方式:用 .range(from, to) 分页大数据读取,使响应保持小巧并避免超时;将 N 次写入合并为一次批量 upsert(每次请求最多约 1000 行,更大集合需分块)。完整的 withRetry、fetchPaginated 与批量/分块辅助函数,以及仪表盘监控步骤,见 implementation.md。
预期结果 应用本技能后,可获得:对各层级速率限制的清晰理解(Free:500 RPM / 50K RPD;Pro:5K RPM / 1M RPD);通过 Supavisor 配置连接池(无服务器用端口 6543 的 Transaction 模式);处理 429 错误的指数退避重试包装;使用 .range(0, 99) 的分页查询以减小负载;将 N 次请求降为 1 次的批量 upsert 模式;为 API 用量告警配置的仪表盘监控。
错误处理 技能列出常见错误及解决方案:429 Too Many Requests 因超出 RPM 或 RPD 限制,应使用 withRetry 退避、降低并发、升级套餐;PGRST000: could not connect 因连接池耗尽,应切换到 Supavisor Transaction 模式(端口 6543)并减少并发查询;Auth over_request_rate_limit 因单一 IP 的注册/登录过多,应添加 CAPTCHA 并在 Dashboard 配置自定义认证速率限制;Storage 413 Payload Too Large 因文件超出套餐限制,应使用 TUS 断点续传并检查套餐文件大小上限;Realtime too_many_connections 因达到并发连接上限,应取消未使用频道订阅、升级到 Pro 以获得 500 连接;Edge Function BOOT_ERROR 因冷启动超时或内存超限,应减小打包体积、避免顶层大体积导入;Prisma 出现 pgbouncer=true 错误因连接字符串缺少参数,应在端口 6543 的池化连接字符串后追加 ?pgbouncer=true。速率限制响应头(X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset、Retry-After)及各自应对方式见 errors.md。
示例与资源 示例包括:带批量插入、速率限制安全客户端的无服务器 Edge Function;按运行时选择连接字符串(无服务器、长运行、直连);基于队列的限流与客户端响应头监控,详见 examples.md。资源包括 Supabase Platform Limits & Quotas、Supavisor Connection Pooling、Edge Functions Limits、Storage Limits、@supabase/supabase-js 参考。
后续步骤 如需用 RLS 策略与 API 密钥管理保护 Supabase 项目,见 supabase-security-basics;如需优化数据库查询与索引,见 supabase-performance-tuning。
限制 资料未提供各套餐价格、具体计费方式、Enterprise 自定义限制的数值,以及 Auth、Storage、Realtime、Edge Functions、数据库连接的完整逐项配额明细(需查阅 rate-limit-tiers.md)。