内容提要
pg_graphql是一个PostgreSQL扩展,现已在Supabase平台上全面支持GraphQL。它允许用户通过GraphQL查询PostgreSQL数据库,支持CRUD操作和权限管理。经过优化,pg_graphql的查询性能显著提升,用户可以通过简单设置启用GraphQL,构建强大的应用程序。
延伸解读
GraphQL 与 PostgreSQL 的深度集成
pg_graphql 作为 PostgreSQL 扩展,将 GraphQL 能力直接嵌入数据库。它从 SQL 模式自动反射 GraphQL 类型和字段,表变为类型,列变为字段,外键变为关系。这种设计让开发者无需额外中间层,即可用 GraphQL 查询现有数据库,同时利用 PostgreSQL 的权限和行级安全策略,简化了架构并提升了安全性。
性能优化与批量操作
pg_graphql 通过将 GraphQL 查询转译为单个 SQL 查询,解决了 N+1 问题,并减少了多表连接时的数据重复。查询被缓存为预编译语句,跳过重复的转译和查询计划步骤。所有操作支持批量处理,减少网络往返。在 Supabase 免费计划硬件上,API 吞吐量达 377.4 请求/秒,SQL 达 656.2 查询/秒。
安全与权限管理
pg_graphql 利用 PostgreSQL 的内置认证和授权机制。GraphQL 类型根据 SQL 角色的 INSERT/UPDATE/DELETE 权限进行过滤,内省模式也相应受限。请求根据 JWT 中的角色(匿名或已认证)解析,并自动遵循行级安全策略,无需额外配置。这意味着可以从单个端点为不同权限级别的用户提供不同的 GraphQL 模式。
当前限制与未来路线图
pg_graphql 的首次正式发布支持标量类型的完整 CRUD、数组类型的只读支持、计算字段扩展以及通过 SQL 注释进行配置。近期计划全面支持数组和 json/b 类型,长期计划支持视图和用户定义函数的自定义变更。如果所需功能尚未支持,用户可以向团队反馈。
Q&A
pg_graphql是什么?
pg_graphql是一个PostgreSQL扩展,允许用户通过GraphQL查询PostgreSQL数据库,支持CRUD操作和权限管理。
如何在Supabase上启用GraphQL?
可以通过Supabase仪表板启用pg_graphql,或者在数据库中创建扩展:create extension pg_graphql;
pg_graphql的查询性能如何优化?
pg_graphql的查询被转化为单个SQL查询,减少数据重复,并支持批量处理以提高API效率。
pg_graphql如何处理权限管理?
pg_graphql根据SQL角色的权限过滤GraphQL类型和字段,确保用户只能访问有权限的数据。
pg_graphql支持哪些操作?
pg_graphql支持CRUD操作、基于游标的分页和行级安全性。
使用pg_graphql构建应用程序的优势是什么?
使用pg_graphql可以通过简单设置构建强大的应用程序,并利用PostgreSQL的安全性和性能优化。