mcpField
P
postgres-patterns

postgres-patterns

github.com/joneqian数据与数据库3250 次安装37 周前更新
代码仓库

关于 postgres-patterns

postgres-patterns 是面向 PostgreSQL 开发者的精简最佳实践参考,适用于查询、模式、迁移和数据库运维。它汇集索引与数据类型建议、常见 SQL 模式及配置要点,并指出可用 database-reviewer Agent 进行深入审查。

主要功能

  1. 01索引选择与排序建议
  2. 02数据类型建议
  3. 03UPSERT 与分页 SQL 模式
  4. 04行级安全与队列示例
  5. 05配置及反模式参考

适用场景

  1. 01为查询模式选择索引
  2. 02设计模式时检查数据类型
  3. 03实现游标分页或队列处理
  4. 04检查行级安全策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/joneqian/claude-skills-suite --skill postgres-patterns

安装后在 Claude Code 中输入/postgres-patterns确认已加载。

详细介绍

PostgreSQL 模式

PostgreSQL 最佳实践速查。如需详细指导,请使用 database-reviewer Agent。

适用场景

  • 编写 SQL 查询或迁移
  • 设计数据库架构
  • 排查慢查询
  • 实现行级安全性
  • 设置连接池

速查

索引速查表
查询模式索引类型示例
WHERE col = valueB-tree(默认)CREATE INDEX idx ON t (col)
WHERE col > valueB-treeCREATE INDEX idx ON t (col)
WHERE a = x AND b > y复合索引CREATE INDEX idx ON t (a, b)
WHERE jsonb @> '{}'GINCREATE INDEX idx ON t USING gin (col)
WHERE tsv @@ queryGINCREATE INDEX idx ON t USING gin (col)
时间序列范围BRINCREATE INDEX idx ON t USING brin (col)
数据类型速查表
用例正确类型避免
IDbigintint、随机 UUID
字符串textvarchar(255)
时间戳timestamptztimestamp
金额numeric(10,2)float
标志booleanvarchar、int
常见模式

复合索引顺序:

-- Equality columns first, then range columns
CREATE INDEX idx ON orders (status, created_at);
-- Works for: WHERE status = 'pending' AND created_at > '2024-01-01'

覆盖索引:

CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
-- Avoids table lookup for SELECT email, name, created_at

部分索引:

CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;
-- Smaller index, only includes active users

RLS 策略(已优化):

CREATE POLICY policy ON orders
  USING ((SELECT auth.uid()) = user_id);  -- Wrap in SELECT!

UPSERT:

INSERT INTO settings (user_id, key, value)
VALUES (123, 'theme', 'dark')
ON CONFLICT (user_id, key)
DO UPDATE SET value = EXCLUDED.value;

游标分页:

SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20;
-- O(1) vs OFFSET which is O(n)

队列处理:

UPDATE jobs SET status = 'processing'
WHERE id = (
  SELECT id FROM jobs WHERE status = 'pending'
  ORDER BY created_at LIMIT 1
  FOR UPDATE SKIP LOCKED
) RETURNING *;
反模式检测
-- Find unindexed foreign keys
SELECT conrelid::regclass, a.attname
FROM pg_constraint c
JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
WHERE c.contype = 'f'
  AND NOT EXISTS (
    SELECT 1 FROM pg_index i
    WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey)
  );

-- Find slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC;

-- Check table bloat
SELECT relname, n_dead_tup, last_vacuum
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY n_dead_tup DESC;
配置模板
-- Connection limits (adjust for RAM)
ALTER SYSTEM SET max_connections = 100;
ALTER SYSTEM SET work_mem = '8MB';

-- Timeouts
ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';
ALTER SYSTEM SET statement_timeout = '30s';

-- Monitoring
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- Security defaults
REVOKE ALL ON SCHEMA public FROM public;

SELECT pg_reload_conf();

相关内容

  • Agent:postgre-database-reviewer - 完整的数据库审查工作流
  • 技能:backend-patterns - API 和后端模式

基于 Supabase Agent Skills(MIT 许可证)

评论

支持 Markdown