64 lines
1.3 KiB
Markdown
64 lines
1.3 KiB
Markdown
# Example
|
|
|
|
You need to create database `pg_migrations_example` before running this example.
|
|
|
|
```bash
|
|
> psql -c "CREATE DATABASE pg_migrations_example"
|
|
CREATE DATABASE
|
|
|
|
> go run *.go init
|
|
version is 0
|
|
|
|
> go run *.go version
|
|
version is 0
|
|
|
|
> go run *.go
|
|
creating table my_table...
|
|
adding id column...
|
|
seeding my_table...
|
|
migrated from version 0 to 3
|
|
|
|
> go run *.go version
|
|
version is 3
|
|
|
|
> go run *.go reset
|
|
truncating my_table...
|
|
dropping id column...
|
|
dropping table my_table...
|
|
migrated from version 3 to 0
|
|
|
|
> go run *.go
|
|
creating table my_table...
|
|
adding id column...
|
|
seeding my_table...
|
|
migrated from version 0 to 3
|
|
|
|
> go run *.go down
|
|
truncating my_table...
|
|
migrated from version 3 to 2
|
|
|
|
> go run *.go version
|
|
version is 2
|
|
|
|
> go run *.go set_version 1
|
|
migrated from version 2 to 1
|
|
|
|
> go run *.go create add email to users
|
|
created migration 4_add_email_to_users.go
|
|
```
|
|
|
|
## Transactions
|
|
|
|
If you'd want to wrap the whole run in a big transaction, which may be the case if you have multi-statement migrations, the code in `main.go` should be slightly modified:
|
|
|
|
```go
|
|
var oldVersion, newVersion int64
|
|
|
|
err := db.RunInTransaction(func(tx *pg.Tx) (err error) {
|
|
oldVersion, newVersion, err = migrations.Run(tx, flag.Args()...)
|
|
return
|
|
})
|
|
if err != nil {
|
|
exitf(err.Error())
|
|
}
|
|
```
|