Database Migrations
Location: backend/db/migrations/
Create Migration
- •Create
NNN_description.sql(next sequential number) - •Write idempotent SQL
- •Run
npm run db:migrate
Patterns
sql
-- New table CREATE TABLE IF NOT EXISTS user_preferences ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL, theme VARCHAR(50) DEFAULT 'light', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Add column ALTER TABLE ideas ADD COLUMN IF NOT EXISTS new_field TEXT; -- JSONB column ALTER TABLE ideas ADD COLUMN IF NOT EXISTS quick_notes JSONB; -- Index CREATE INDEX IF NOT EXISTS idx_ideas_domain ON ideas(domain); -- pgvector CREATE EXTENSION IF NOT EXISTS vector; ALTER TABLE ideas ADD COLUMN IF NOT EXISTS embedding vector(1536);
After Migration
- •Update
backend/src/types/index.ts- add interface properties - •Update
backend/src/repositories/*Repository.ts- update mapFromDb
Gotchas
- •Always IF NOT EXISTS - idempotent migrations
- •No rollback - fix failures manually
- •Check state first -
\d tablenamein psql - •JSONB for flexible data - evolving structures