drizzle-orm
Drizzle ORM patterns for Neon PostgreSQL. Use when creating tables, schemas, migrations, or database queries.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
Drizzle ORM (Neon PostgreSQL)
Creating a new table
- Create file in
lib/db/schemas/{domain}.ts - Define enum if needed
- Define table with columns and indexes
- Export types
- Re-export from
lib/db/schema.ts
import { pgTable, pgEnum, index, integer, varchar, timestamp } from "drizzle-orm/pg-core"
import type { InferSelectModel, InferInsertModel } from "drizzle-orm"
// 1. Enum (if needed)
export const statusEnum = pgEnum("status", ["active", "inactive"])
// 2. Table with indexes as third argument
export const items = pgTable("items", {
id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
name: varchar("name", { length: 255 }).notNull(),
status: statusEnum("status").notNull(),
created_at: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
updated_at: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
}, (table) => [
index("idx_items_name").on(table.name),
])
// 3. Types
export type Item = InferSelectModel<typeof items>
export type InsertItem = InferInsertModel<typeof items>
See examples/schema-pattern.ts for full pattern.
Adding a foreign key
author_id: integer("author_id")
.notNull()
.references(() => users.id, { onDelete: "cascade" })
Always specify onDelete behavior explicitly.
Standard columns
// Primary key
id: integer("id").primaryKey().generatedAlwaysAsIdentity()
// Timestamps (always with timezone)
created_at: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
updated_at: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
Naming conventions
- Index:
idx_{table}_{column}→idx_items_name - One domain per schema file →
songs.ts,dictionary.ts
Avoid
-
serial()→ useinteger().generatedAlwaysAsIdentity() - Timestamps without
{ withTimezone: true } - Foreign keys without explicit
onDelete
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-03-03
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!