mcpField
D
drizzle-postgres

drizzle-postgres

github.com/pedronauck数据与数据库644248 次安装1 周前更新
代码仓库

关于 drizzle-postgres

面向使用 Drizzle ORM 构建类型安全 PostgreSQL 应用的实用参考技能,帮助开发者设计表关系、编写查询、管理迁移并排查性能问题。

主要功能

  1. 01表结构与关系模式
  2. 02类型化查询示例
  3. 03迁移命令指引
  4. 04查询性能检查
  5. 05PostgreSQL 参考主题

适用场景

  1. 01设计一对多或多对多数据关系
  2. 02用关系查询避免 N+1 查询
  3. 03生成并应用结构迁移
  4. 04排查慢查询并优化索引

安装

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

$npx skills add https://github.com/pedronauck/skills --skill drizzle-postgres

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
CHEATSHEET.md
MIGRATIONS.md
PERFORMANCE.md
POSTGRES.md
QUERIES.md
RELATIONS.md
SCHEMA.md

详细介绍

PostgreSQL + Drizzle ORM

使用 PostgreSQL 18 和 Drizzle ORM 构建类型安全的数据库应用。

基本命令

npx drizzle-kit generate   # Generate migration from schema changes
npx drizzle-kit migrate    # Apply pending migrations
npx drizzle-kit push       # Push schema directly (dev only!)
npx drizzle-kit studio     # Open database browser

快速决策树

“如何建模这种关系?”
Relationship type?
├─ One-to-many (user has posts)     → FK on "many" side + relations()
├─ Many-to-many (posts have tags)   → Junction table + relations()
├─ One-to-one (user has profile)    → FK with unique constraint
└─ Self-referential (comments)      → FK to same table
“为什么我的查询很慢?”
Slow query?
├─ Missing index on WHERE/JOIN columns  → Add index
├─ N+1 queries in loop                  → Use relational queries API
├─ Full table scan                      → EXPLAIN ANALYZE, add index
├─ Large result set                     → Add pagination (limit/offset)
└─ Connection overhead                  → Enable connection pooling
“该用哪个 drizzle-kit 命令?”
What do I need?
├─ Schema changed, need SQL migration   → drizzle-kit generate
├─ Apply migrations to database         → drizzle-kit migrate
├─ Quick dev iteration (no migration)   → drizzle-kit push
└─ Browse/edit data visually            → drizzle-kit studio

目录结构

src/db/
├── schema/
│   ├── index.ts          # Re-export all tables
│   ├── users.ts          # Table + relations
│   └── posts.ts          # Table + relations
├── db.ts                 # Connection with pooling
└── migrate.ts            # Migration runner
drizzle/
└── migrations/           # Generated SQL files
drizzle.config.ts         # drizzle-kit config

Schema 模式

带时间戳的基本表
export const users = pgTable("users", {
  id: uuid("id").primaryKey().defaultRandom(),
  email: varchar("email", { length: 255 }).notNull().unique(),
  createdAt: timestamp("created_at").defaultNow().notNull(),
  updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
带索引的外键
export const posts = pgTable(
  "posts",
  {
    id: uuid("id").primaryKey().defaultRandom(),
    userId: uuid("user_id")
      .notNull()
      .references(() => users.id),
    title: varchar("title", { length: 255 }).notNull(),
  },
  (table) => [
    index("posts_user_id_idx").on(table.userId), // ALWAYS index FKs
  ],
);
关系
export const usersRelations = relations(users, ({ many }) => ({
  posts: many(posts),
}));

export const postsRelations = relations(posts, ({ one }) => ({
  author: one(users, { fields: [posts.userId], references: [users.id] }),
}));

查询模式

关系查询(避免 N+1)
// ✓ Single query with nested data
const usersWithPosts = await db.query.users.findMany({
  with: { posts: true },
});
筛选查询
const activeUsers = await db
  .select()
  .from(users)
  .where(eq(users.status, "active"));
事务
await db.transaction(async (tx) => {
  const [user] = await tx.insert(users).values({ email }).returning();
  await tx.insert(profiles).values({ userId: user.id });
});

性能检查清单

优先级检查项影响
CRITICAL为所有外键创建索引避免 JOIN 时进行全表扫描
CRITICAL对嵌套数据使用关系查询避免 N+1
HIGH在生产环境中使用连接池降低连接开销
HIGH对慢查询使用 EXPLAIN ANALYZE找出缺失的索引
MEDIUM对筛选后的子集使用部分索引索引更小、速度更快
MEDIUMPK 使用 UUIDv7(PG18+)提高索引局部性

反模式(CRITICAL)

反模式问题修复方法
没有 FK 索引JOIN 缓慢、全表扫描为每个 FK 列添加索引
循环中的 N+1每行执行一次查询使用 with: 关系查询
没有连接池每个请求都创建连接使用 @neondatabase/serverless 或类似方案
在生产环境中使用 push存在数据丢失风险始终使用 generate + migrate
将 JSON 存储为文本无校验,查询效果差使用 jsonb() 列类型

参考文档

文件用途
references/SCHEMA.md列类型、约束
references/QUERIES.md运算符、连接、聚合
references/RELATIONS.md一对多、多对多
references/MIGRATIONS.mddrizzle-kit 工作流
references/POSTGRES.mdPG18 功能、RLS、分区
references/PERFORMANCE.md索引、优化
references/CHEATSHEET.md快速参考

资源

Drizzle ORM
PostgreSQL

评论

支持 Markdown