Database
Migrations and Seeding
Migration manager, migration registry, and seeder runner behavior
Migration Manager
MigrationManager wraps Bun migrator operations.
Core methods:
CreateTablesMigrateRollbackStatusResetAutoMigrateCreateMigration
Migration Registry
The package re-exports migration registry symbols from extensions/database/migrate:
database.Migrationsdatabase.RegisterMigrationdatabase.RegisterModeldatabase.Models
The migrate package attempts caller discovery lazily through GetMigrations().
Typical Migration Flow
mgr := database.NewMigrationManager(db, database.Migrations, database.NewNoopMigrationLogger())
if err := mgr.CreateTables(ctx); err != nil {
return err
}
if err := mgr.Migrate(ctx); err != nil {
return err
}Seeder Runner
SeederRunner executes registered Seeder implementations and optionally tracks runs.
Key methods:
WithTracking(enabled bool)RegisterRegisterManyRunRunSeederResetResetAllList
Tracking writes to seeders table (SeederRecord).
Seeder Interface
type Seeder interface {
Name() string
Seed(ctx context.Context, db *bun.DB) error
}Recommended Seeding Practices
- keep seeders idempotent
- use deterministic unique keys for upsert-like behavior
- wrap multi-step seed jobs in transactions when consistency matters
- use
RunSeederfor targeted re-runs in development
How is this guide?