I really want a better explanation of how 'rollback' works. You have to create a fork before you run your migration script so you can roll back to that fork?
Rollback is essentially like a fork to the past. It creates a new database, but only replays transactions up to a specific instant. It's based on the Postgres Point-in-Time Recovery feature: http://www.postgresql.org/docs/current/static/continuous-arc...
Rollback can be run at any point in time you do not have to create a fork ahead of time. We will be conducting some follow up posts explaining how the underlying mechanism works, for now you can read more on it at https://devcenter.heroku.com/articles/heroku-postgres-rollba...