Supabase GraphQL关联表查询问题:自定义函数在GraphiQL中不可见
解决Supabase自定义SQL函数在GraphiQL中不可见的问题
以下是几个排查和解决的方向:
检查并设置函数权限
Supabase的GraphQL接口依赖PostgREST,默认只允许anon或authenticated角色执行的函数才会暴露到GraphQL中。执行以下SQL赋予权限:GRANT EXECUTE ON FUNCTION filter_events_search(VARCHAR) TO anon, authenticated;改用SQL函数替代PL/pgSQL函数
PostgREST对SQL函数的支持更友好,PL/pgSQL函数有时会因为内部逻辑的封装导致GraphQL无法识别。把你的函数改成SQL版本试试:CREATE OR REPLACE FUNCTION filter_events_search(gender VARCHAR) RETURNS TABLE(id UUID) LANGUAGE sql STABLE AS $$ SELECT e.id FROM events e JOIN teams t ON e.team_id = t.id WHERE t.gender = $1; $$;手动刷新GraphQL Schema
Supabase不会自动检测函数的创建/修改,需要手动触发Schema重载。在Supabase控制台的SQL编辑器中执行:NOTIFY pgrst, 'reload schema';执行后再回到GraphiQL刷新页面重新查询。
确认函数所在Schema
确保函数创建在publicSchema下(PostgREST默认只扫描public)。执行以下SQL检查函数位置:SELECT proname, schemaname FROM pg_proc WHERE proname = 'filter_events_search';如果函数不在public,要么把函数移到public,要么在Supabase的
Settings > API中添加对应的Schema到Extra schemas列表里。
内容的提问来源于stack exchange,提问作者Blake Hayes
相关产品推荐
相关产品推荐

