SuperAPI AI 工具集

postgres-best-practices

数据与分析

查看项目

更新于 10-16 03:33

技能介绍

Postgres Best Practices 是一份来自 Supabase 的 PostgreSQL 性能优化指南,其规则按影响程度进行优先级排序,共分为 8 个类别。该指南适用于编写 SQL 查询、设计数据库结构以及使用 Supabase 客户端的场景。

用途

该指南用于在开发过程中提供 PostgreSQL 性能优化的参考规则,帮助开发者在使用 Supabase 时遵循最佳实践,覆盖从查询编写到数据库设计的多个环节。

主要能力

指南按优先级将规则划分为以下 8 个类别:

  1. 查询性能(关键):使用 EXPLAIN ANALYZE 理解查询计划;在频繁查询的列(WHERE、JOIN、ORDER BY)上添加索引;避免 SELECT *,只指定需要的列;对大型结果集使用 LIMIT;优化 JOIN,确保外键有索引;使用预处理语句(Supabase 客户端自动完成);尽可能批量操作。

  2. 连接管理(关键):使用连接池(Supabase 提供);正确关闭连接;避免连接泄漏,使用连接限制;在 Supabase 仪表板中监控连接使用情况;服务端组件使用服务端客户端;客户端组件仅使用客户端客户端。

  3. 模式设计(高):选择合适的数据类型(UUID 与 INTEGER、VARCHAR 与 TEXT);适当使用 NOT NULL 约束;添加外键约束以保证数据完整性;对固定值集使用 ENUM;适当规范化,与查询性能平衡;对灵活模式(产品、元数据)使用 JSONB。

  4. 并发与锁(中高):对原子操作使用事务;保持事务简短,避免长时间运行的事务;使用适当的隔离级别;避免死锁,以一致顺序获取锁;谨慎使用 SELECT FOR UPDATE(可能导致阻塞)。

  5. 安全与 RLS(中高):在所有表上启用 RLS;在多租户系统中创建租户隔离策略;彻底测试 RLS 策略;仅在必要时使用服务角色(会绕过 RLS);在数据库操作前验证输入;使用参数化查询(Supabase 客户端自动完成)。

  6. 数据访问模式(中):对大型数据集使用分页(Supabase 中的 .range());对频繁访问的数据实现缓存;对复杂聚合使用物化视图;对读密集型工作负载考虑只读副本;针对常见查询模式进行优化。

  7. 监控与诊断(低中):在 Supabase 仪表板中监控慢查询;使用 pg_stat_statements 进行查询分析;为性能下降设置警报;定期审查查询日志;跟踪连接池使用情况。

  8. 高级特性(低):使用全文搜索(PostgreSQL tsvector);对超大表考虑分区;谨慎使用触发器;在需要时利用 Postgres 扩展。

使用方式

指南以规则清单和代码示例的形式呈现,包含以下常见模式:

索引创建:提供单列索引、复合索引(顺序很重要)、部分索引(用于过滤查询)和唯一索引的 SQL 示例。

查询优化:对比了不良实践(SELECT * 且无限制)与良好实践(指定列并加限制、过滤、排序、限制数量)的 Supabase 客户端代码。

分页:展示使用 .range() 进行分页的代码示例。

RLS 策略最佳实践:提供启用 RLS、租户隔离策略和公共读取策略的 SQL 示例。

连接使用:展示服务端组件使用服务端客户端、客户端组件使用客户端客户端的代码示例。

指南还附有性能检查清单,包括:查询在 WHERE/JOIN 列上使用索引、SELECT 语句指定列(非 *)、大型查询使用 LIMIT 或分页、RLS 策略经过优化(不过于复杂)、外键有索引、事务保持简短、连接池已配置、慢查询被识别并优化。

关键文件包括:supabase/migrations/(模式和索引)、src/lib/supabase/(客户端配置)、Supabase Dashboard(查询性能监控)。

适用场景

该指南适用于使用 Supabase 和 PostgreSQL 进行开发的场景,特别是在编写 SQL 查询、设计数据库模式、配置连接、设置 RLS 策略以及进行性能监控和优化时。

限制

该指南的具体版本、更新日期、许可协议以及是否提供额外支持等信息暂未提供。