This article is to enable auto migration in GoLang with integration with GORM in up-down approach.
To enable auto migration in Go
with GORM
install golang-migrate
.
At first, create migration CLI
$ go get -u -d github.com/golang-migrate/migrate/cmd/migrate $ cd $GOPATH/src/github.com/golang-migrate/migrate/cmd/migrate $ git checkout $TAG # e.g. v4.8.0 $ go build -tags 'postgres' -ldflags="-X main.Version=$(git describe --tags) |
Navigate to your migrate project and find out migrate.exe
file.
Copy migrate.exe
.
Paste it into $GOPATH/bin
folder.
Your migration CLI is ready to use. N.B: [find out the latest version of migrate cmd and replace it]
Read more about CLI.
i.e: migrate create -ext sql -dir db/migrations -digits 7 create_users_table
migrate command will create a db/migrations
folder with to sql
(up/down) file.
Edit up file. for example-
CREATE TABLE IF NOT EXISTS users( user_id serial PRIMARY KEY, username VARCHAR (50) UNIQUE NOT NULL, password VARCHAR (50) NOT NULL, email VARCHAR (300) UNIQUE NOT NULL ); |
Edit down file. for example-
DROP TABLE IF EXISTS users;
Now let install golang-migrate
.
$ go get github.com/golang-migrate/migrate
Configure migration with GORM
.
db, err := gorm.Open("postgres", config.ConnectionString) driver, err := postgres.WithInstance(db.DB(), &postgres.Config{}) m, err := migrate.NewWithDatabaseInstance( "file://db/migrations", "postgres", driver) m.Steps(2) |
Use command line to run migration
If you prefer a command-line tool over configured code then it’s for you!
Remove GORM
configuration. (If any)
db, err := gorm.Open("postgres", config.ConnectionString) // driver, err := postgres.WithInstance(db.DB(), &postgres.Config{}) // m, err := migrate.NewWithDatabaseInstance( // "file://db/migrations", // "postgres", driver) // m.Steps(2) |
Run migration script. i.e:
migrate -source file://{migration file path} -database postgres://{user name}:{password}@{db location}/{db name}?sslmode=disable up |
For example:
migrate -source file://db/migrations -database postgres://postgres:648782@localhost:5432/zachai_auction?sslmode=disable up |
use down for dropping
Happy Coding…
Highlight important information in a panel like this one. To edit this panel's color or style, select one of the options in the menu below. |
The content by label feature displays related articles automatically, based on labels you choose. To edit options for this feature, select the placeholder below and tap the pencil icon.
|