内容提要
PostgREST v10发布,自动将PostgreSQL数据库转为RESTful API。新特性包括通过HTTP获取执行计划、改进关系检测及计算关系,支持一对一和多对多关系的自动检测,提升查询性能。未来计划增加自定义聚合和操作符。
延伸解读
执行计划功能:开发环境专用
PostgREST v10 新增通过 HTTP 或 supabase-js 获取执行计划的功能,类似于 PostgreSQL 的 EXPLAIN 命令。该功能默认关闭,需设置 db-plan-enabled 为 true 才启用,且仅适用于开发环境。它支持读、写和 RPC 请求,因为每个请求都会生成单条 SQL 查询。通过 Accept 头指定 vendor 媒体类型即可获取文本或 JSON 格式的执行计划,帮助开发者快速分析查询性能,尤其是 RLS 策略的影响。
关系检测改进:一对一与计算关系
v10 自动检测一对一关系,避免不必要的 JSON 数组。检测依据外键上的唯一约束或主键。对于无法使用外键的数据库对象(如复杂视图),新增“计算关系”,通过可内联的 SQL 函数定义关系,支持一对一、一对多和多对多。计算关系遵循 SQL 函数内联规则,能高效注入生成的查询中,还可用于覆盖已检测的关系。
多对多关系检测的重大变化
多对多关系的检测现在要求连接表的主键必须包含多对多两端的外键列。这是重大变更,旨在避免复杂模式中连接表被错误检测。如果无法修改主键,可以使用计算关系来定义多对多。一对多和多对一关系的检测保持不变。升级时需注意此变更可能影响现有查询。
Q&A
PostgREST v10的新特性有哪些?
PostgREST v10的新特性包括通过HTTP获取执行计划、改进关系检测及计算关系,支持一对一和多对多关系的自动检测,提升查询性能。
如何通过HTTP获取执行计划?
可以使用curl命令,通过设置Accept头为特定的媒体类型来获取执行计划,例如:curl -H 'Accept: application/vnd.pgrst.plan' 'https://<project>.supabase.co/rest/v1/clients?select=*&id=eq.1'。
PostgREST如何检测一对一和多对多关系?
一对一关系通过唯一约束或主键自动检测,多对多关系的检测需要主键包含外键列,这是一个重大变化。
什么是计算关系,PostgREST如何使用它?
计算关系是指在没有外键的情况下定义关系,PostgREST使用SQL函数来实现,允许在复杂视图中定义关系。
PostgREST v10对多对多关系的检测有什么重大变化?
多对多关系的检测现在要求主键必须包含外键列,以确保正确识别连接表。
未来PostgREST的计划是什么?
未来计划增加自定义聚合和操作符,以提升PostgREST的可扩展性。