02 DB migration in Golang

157 阅读1分钟

先看以下命令行

➜  go-microservices cd simplebank
➜  simplebank mkdir -p db/migration
➜  simplebank migrate create -ext sql -dir db/migration -seq init_schema
/root/workspace/go-microservices/simplebank/db/migration/000001_init_schema.up.sql
/root/workspace/go-microservices/simplebank/db/migration/000001_init_schema.down.sql

为什么会有up/down两种后缀?

image.png

编写Makefile

postgres:
	docker run --name postgres12 -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=secret -d postgres:12-alpine
createdb:
	docker exec -it postgres12 createdb --username=root --owner=root simple_bank
dropdb:
	docker exec -it dropdb simple_bank
.PHONY:postgres createdb dropdb

这样你的同事在终端输入make postgresmake createdbmake dropdb就可以完成容器的运行、数据库的建立与删除了

接下来完成数据迁移

之前,我们新建了一个空的simple_bank数据库,现在进行数据迁移

➜  simplebank migrate -path db/migration -database "postgresql://root:secret@172.27.191.124:5432/simple_bank?sslmode=disable" -verbose up
  • 因为我的ubuntu在容器里,所以这里的地址需要改成ipconfig的结果(本机ip)
  • 如果是mac的小伙伴,这里是localhost

image.png 返回simple_bank查看结果

image.png

更新Makefile

postgres:
	docker run --name postgres12 -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=secret -d postgres:12-alpine
createdb:
	docker exec -it postgres12 createdb --username=root --owner=root simple_bank
dropdb:
	docker exec -it dropdb simple_bank
migrateup:
	migrate -path db/migration -database "postgresql://root:secret@172.27.191.124:5432/simple_bank?sslmode=disable" -verbose up
migratedown:
	migrate -path db/migration -database "postgresql://root:secret@172.27.191.124:5432/simple_bank?sslmode=disable" -verbose down

.PHONY:postgres createdb dropdb migrateup migratedown

因为我的开发环境是Docker内部,所以172.27.191.124为主机ipv4地址,这个地址在电脑开机时会变,所以需要更换,否则会出现无法连接到数据库的错误