You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase调用自定义PostgreSQL函数报错:PGRST202函数未找到

解决Supabase RPC调用找不到PostgreSQL函数的问题

以下是针对性的排查和解决步骤:

  • 检查函数权限
    Supabase客户端调用API时默认使用web_anon或authenticated角色,需确保这些角色拥有函数的执行权限。执行以下SQL语句赋权:

    GRANT EXECUTE ON FUNCTION public.getRepeatedQuestionsByUserIdWithSubjectNameAndOptions(text) TO web_anon, authenticated;
    

    注意:将text替换为你函数实际的参数类型(比如uuid,若user_id为UUID类型)。

  • 匹配函数签名与调用参数
    客户端RPC调用必须严格匹配函数的参数名和类型:

    1. 执行以下SQL确认函数的参数定义:
      SELECT proname, proargnames, proargtypes::regtype[] FROM pg_proc WHERE proname = 'getRepeatedQuestionsByUserIdWithSubjectNameAndOptions';
      
    2. 调用时传入正确的参数名,以Flutter为例:
      await supabase.rpc(
        'getRepeatedQuestionsByUserIdWithSubjectNameAndOptions',
        params: {'user_id': '你的用户ID'},
      );
      
      参数名需和函数定义完全一致(PostgreSQL参数名大小写不敏感,但建议保持统一)。
  • 刷新Supabase Schema缓存
    Supabase API会缓存数据库schema,修改函数后需手动刷新:

    1. 进入Supabase控制台,点击左侧菜单Settings -> API。
    2. 点击Reload Schema按钮,等待缓存刷新完成后再尝试调用。
  • 确认函数所在Schema
    执行以下SQL确认函数是否在public schema下:

    SELECT proname, pronamespace::regnamespace FROM pg_proc WHERE proname = 'getRepeatedQuestionsByUserIdWithSubjectNameAndOptions';
    

    若返回的namespace不是public,调用时需指定schema,例如supabase.rpc('schema_name.getRepeatedQuestionsByUserIdWithSubjectNameAndOptions', ...)。

  • 排查函数重载问题
    若存在同名但参数不同的函数,客户端调用可能匹配不到正确签名。执行以下SQL查看所有同名函数:

    SELECT proname, proargtypes::regtype[] FROM pg_proc WHERE proname = 'getRepeatedQuestionsByUserIdWithSubjectNameAndOptions';
    

    确保调用时传入的参数类型与目标函数完全匹配。

内容的提问来源于stack exchange,提问作者Jan Cahlík

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:33:25