内容提要
Supabase GraphQL 1.4+ 新增用户定义函数(UDF)支持,提升了灵活性。用户可通过 GraphQL 接口执行自定义 SQL 逻辑,支持复杂的服务器端操作,包括分页、过滤和排序。尽管目前存在一些限制,未来将增加更多特性。用户可在 Supabase Studio 中探索 GraphQL API。
延伸解读
函数波动性决定 GraphQL 操作类型
pg_graphql 根据 SQL 函数的波动性自动决定其在 GraphQL 中的位置:immutable 和 stable 函数被映射为 Query 字段,而 volatile(默认)函数则成为 Mutation 字段。这一设计让只读操作与写入操作在 GraphQL 层面自然分离,有助于客户端理解函数的行为。开发者在定义函数时,应明确指定波动性,以控制其暴露方式。
返回集合时自动获得分页与过滤能力
当 UDF 返回现有对象类型的集合(如 setof Account)时,pg_graphql 会自动为该字段生成 Relay 风格的分页参数(first、last、before、after)以及过滤和排序参数。这意味着开发者无需手动实现分页逻辑,即可在 GraphQL 查询中直接使用这些功能。同时,返回类型上的外键关系也会自动生效,使 UDF 结果无缝接入现有 Graph。
当前版本的功能限制与规避思路
pg_graphql 1.4+ 暂不支持重载函数、无名参数、返回 void、可变参数、接受表/视图元组类型参数以及接受数组类型的函数。这些限制意味着部分复杂 SQL 函数无法直接通过 GraphQL 暴露。若需使用这些特性,可考虑调整函数定义以符合当前支持范围,或等待后续版本更新。
如何检查与升级 GraphQL 版本
用户可通过查询 pg_available_extensions 表来确认当前项目的 pg_graphql 版本。若版本低于 1.4,则需参考升级指南进行升级。新建项目将自动获得支持 UDF 的最新版本。对于不熟悉 GraphQL 的用户,Supabase Studio 内置的 GraphiQL 界面提供了交互式探索 API 的途径。
Q&A
Supabase GraphQL 1.4+ 新增了什么功能?
Supabase GraphQL 1.4+ 新增了用户定义函数(UDF)支持,提升了灵活性。
用户如何通过 GraphQL 接口执行自定义 SQL 逻辑?
用户可以通过 GraphQL 查询调用自定义 SQL 函数,从而执行复杂的服务器端操作。
UDF 支持哪些类型的函数?
UDF 支持稳定性函数,能够返回现有对象类型的集合。
当前 GraphQL API 存在什么限制?
当前 API 不支持某些 SQL 函数特性,如重载函数、无名参数函数和返回 void 的函数等。
如何在 Supabase Studio 中探索 GraphQL API?
用户可以在 Supabase Studio 中使用 GraphiQL 交互式探索项目的 GraphQL API。
如何检查项目的 GraphQL 版本?
可以通过查询 `select * from pg_available_extensions where name = 'pg_graphql';` 来检查项目的 GraphQL 版本。