Adding a Database Table
1. Define the table
Add a new table to src/db/schema.ts:
import { pgTable, text, timestamp, boolean } from 'drizzle-orm/pg-core';
import { user } from './schema';
export const project = pgTable('project', {
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
name: text('name').notNull(),
description: text('description'),
ownerId: text('owner_id').notNull().references(() => user.id),
isPublic: boolean('is_public').notNull().default(false),
createdAt: timestamp('created_at').notNull().defaultNow(),
updatedAt: timestamp('updated_at').notNull().defaultNow(),
});2. Push or migrate
For development:
pnpm db:pushFor production (generates a migration file):
pnpm db:migrate3. Query the table
import { db } from '@/lib/db';
import { project } from '@/db/schema';
import { eq } from 'drizzle-orm';
// Insert
await db.insert(project).values({
name: 'My Project',
ownerId: session.user.id,
});
// Select
const projects = await db
.select()
.from(project)
.where(eq(project.ownerId, session.user.id));4. Type safety
Drizzle generates TypeScript types from your schema:
import type { InferSelectModel, InferInsertModel } from 'drizzle-orm';
type Project = InferSelectModel<typeof project>;
type NewProject = InferInsertModel<typeof project>;