Migrations & Seeding
SQL migrations under root migrations/ are the schema source of truth. Named seed compositions live in root seeds/. Generated projects embed migration SQL so CLI commands, tests, and production binaries share one history.
Create and apply migrations
1andurel generate migration create_products_table
2andurel db migrate up
3andurel db migrate status
Generated file shape (migrations/00015_create_products_table.sql):
1-- +goose Up
2-- +goose StatementBegin
3CREATE TABLE IF NOT EXISTS products (
4 id uuid NOT NULL PRIMARY KEY,
5 created_at TIMESTAMP WITH TIME ZONE NOT NULL,
6 updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
7 name VARCHAR(255) NOT NULL,
8 price_cents INTEGER NOT NULL
9);
10-- +goose StatementEnd
11
12-- +goose Down
13-- +goose StatementBegin
14DROP TABLE IF EXISTS products;
15-- +goose StatementEnd
| Command | Behavior |
|---|---|
andurel db migrate up |
Apply pending migrations |
andurel db migrate down |
Roll back the most recent migration |
andurel db migrate up-to [version] |
Apply through a version |
andurel db migrate down-to [version] |
Roll back down to a version |
andurel db migrate reset |
Roll back all, then re-apply |
andurel db migrate fix |
Re-number migrations to fix gaps |
andurel db migrate status |
Show applied / pending state |
migrate up and status print Goose text:
1OK 00015_create_products_table.sql (8.1ms)
1 Applied At Migration
2 =======================================
3 2026-09-23 14:02:11 00001_create_river_migration_table.sql
4 2026-09-23 14:05:02 00015_create_products_table.sql
narsilc output does not replace migrations. Write schema changes as SQL first, apply them, then andurel generate model / scaffold from the migrated table. After a later migration changes columns on an existing table model, run andurel sync model NAME. See db.
Production migrate binary
cmd/migrate applies the same embedded SQL with storage.RunMigrations on migrations.Migrations. It is a one-shot process, not part of cmd/app start. Development still uses andurel db migrate up. Production and CI should run the migrate binary (or image) before starting app and queue.
Seeds
1andurel db seed
2andurel db seed development
3andurel db seed --list
4andurel db rebuild --seed test
1andurel db seed --list --json
1{
2 "ok": true,
3 "data": { "names": ["default", "development", "test"] },
4 "summary": "Found 3 seed sets"
5}
Seeds should call exported model and factory APIs. Keep development, test, and production-safe seed intent separate. andurel db rebuild drops and recreates the database, migrates, and seeds (pass --skip-seed to stop after migrate).
See Factories.