A tour of goose up and down commands
A while ago a co-op student, who happened to be a visual leaner, asked if it were possible to
explain goose commands visually. At the time we were still at an office, so we gathered around the
whiteboard and doodled some diagrams.
This post captures some of those whiteboard sketches, which seemed to help.
up commands
- goose up
- 
migrate all pending migrations to the most recent version 
- goose up-by-one
- 
migrate a single pending version 
- goose up-to N
- 
migrate to a specific pending version, where N is a migration number 
up examples
Let's illustrate up commands with a concrete example.
Suppose our ./schema/migrations folder contains 11 migration files. We have previously applied 8 migrations and 3 migrations are currently pending.
Running goose version returns: goose: version 8
Running goose status returns:
Applied At                  Migration
=======================================
Sun Dec 19 20:09:48 2021 -- 00001_a.sql
Sun Dec 19 20:09:48 2021 -- 00002_b.sql
Sun Dec 19 20:09:48 2021 -- 00003_c.sql
Sun Dec 19 20:09:48 2021 -- 00004_d.sql
Sun Dec 19 20:09:48 2021 -- 00005_e.sql
Sun Dec 19 20:09:48 2021 -- 00006_f.sql
Sun Dec 19 20:09:48 2021 -- 00007_g.sql
Sun Dec 19 20:09:48 2021 -- 00008_h.sql
Pending                  -- 00009_i.sql
Pending                  -- 00010_j.sql
Pending                  -- 00011_k.sql
- Running goose upapplies all 3 pending migrations: 9, 10 and 11
- Running goose up-by-oneapplies only migration 9
- Running goose up-to 8does nothing, since 8 has already been applied
- Running goose up-to 10applies migrations 9 and 10

down commands
- goose down
- 
migrate the latest version down 
- goose down-to N
- 
migrate down to a specific version, where N is a migration number 
down examples
Let's illustrate down commands, continuing with the above example. We have previously applied all 11 migrations from the ./schema/migrations folder.
Running goose version returns: goose: version 11
Running goose status returns:
Applied At                  Migration
=======================================
Sun Dec 19 21:31:11 2021 -- 00001_a.sql
Sun Dec 19 21:31:11 2021 -- 00002_b.sql
Sun Dec 19 21:31:11 2021 -- 00003_c.sql
Sun Dec 19 21:31:11 2021 -- 00004_d.sql
Sun Dec 19 21:31:11 2021 -- 00005_e.sql
Sun Dec 19 21:31:11 2021 -- 00006_f.sql
Sun Dec 19 21:31:11 2021 -- 00007_g.sql
Sun Dec 19 21:31:11 2021 -- 00008_h.sql
Sun Dec 19 21:31:11 2021 -- 00009_i.sql
Sun Dec 19 21:31:11 2021 -- 00010_j.sql
Sun Dec 19 21:31:11 2021 -- 00011_k.sql
- Running goose downapplies the down migration for 11
- Running goose down-to 11does nothing
- Running goose down-to 9applies the down migrations for 11 and 10
- Running goose down-to 0applies all down migrations

Bonus
goose down-to 0 is the same as goose reset. Applying all down migrations.
goose redo is the same as goose down followed by goose up-by-one. Reapplying the latest migration.
