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调用必须严格匹配函数的参数名和类型:- 执行以下SQL确认函数的参数定义:
SELECT proname, proargnames, proargtypes::regtype[] FROM pg_proc WHERE proname = 'getRepeatedQuestionsByUserIdWithSubjectNameAndOptions'; - 调用时传入正确的参数名,以Flutter为例:
参数名需和函数定义完全一致(PostgreSQL参数名大小写不敏感,但建议保持统一)。await supabase.rpc( 'getRepeatedQuestionsByUserIdWithSubjectNameAndOptions', params: {'user_id': '你的用户ID'}, );
- 执行以下SQL确认函数的参数定义:
刷新Supabase Schema缓存
Supabase API会缓存数据库schema,修改函数后需手动刷新:- 进入Supabase控制台,点击左侧菜单
Settings->API。 - 点击
Reload Schema按钮,等待缓存刷新完成后再尝试调用。
- 进入Supabase控制台,点击左侧菜单
确认函数所在Schema
执行以下SQL确认函数是否在publicschema下: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
相关产品推荐
相关产品推荐

