我有一个 golang 项目。
下面是
main.go
文件 -
package main
import (
"database/sql"
"log"
_ "github.com/jackc/pgx/v4/stdlib"
dbmigration "github.com/rajcspsg/grpc-ms/unary/server/db"
)
func main() {
sqlDB, err := sql.Open("pgx", "postgres://postgres:postgres@localhost:5432/grpc?sslmode=disable")
if err != nil {
log.Fatalln("Can't connect to database: ", err)
}
dbmigration.Migrate(sqlDB)
}
dbmigration.go
是 -
package dbmigration
import (
"database/sql"
"log"
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
)
func Migrate(conn *sql.DB) {
log.Println("Database migration start")
m, err := migrate.New(
"file://db/migrations",
"postgres://user-name:strong-password@localhost:5432/postgres?sslmode=disable")
if err != nil {
log.Fatalln("Database migration failed: ", err)
}
if err := m.Down(); err != nil {
log.Fatalln("Database migration(down) failed:", err)
}
if err := m.Up(); err != nil {
log.Fatalln("Database migration(up) failed:", err)
}
log.Println("Database migration completed!!!")
}
db/migrations/000_create_table_dummy.up.sql
-
CREATE TABLE IF NOT EXISTS DUMMY (
user_id UUID PRIMARY KEY,
user_name TEXT NOT NULL,
created_at TIMESTAMPZ,
updated_at TIMESTAMPZ
);
db/migrations/000_create_table_dummy.down.sql
-
DROP TABLE IF EXISTS DUMMY;
运行 postgres 的 docker-compose.yml
是 -
version: "3.8"
services:
db:
image: postgres
container_name: local_pgdb4grpc
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: user-name
POSTGRES_PASSWORD: strong-password
volumes:
- local_pgdata:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin4_container4grpc
restart: always
ports:
- "8888:80"
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: strong-password
volumes:
- pgadmin-data:/var/lib/pgadmin
volumes:
local_pgdata:
pgadmin-data:
当我运行主程序时,出现以下错误 -
./bin/server
18:41:36 Database migration start
18:41:37 Database migration(down) failed: no change
make: *** [Makefile:27: execute] Error 1
如何修复此错误?
这是因为你想删除不存在的表。 如何修复:
首先,您应该将一些内容上传到数据库
它应该看起来像这样:
func Initial() {
if err := m.Up(); err != nil {
log.Fatalln("Database migration(up) failed:", err)
}
}
接下来,运行迁移。
附注迁移 - 不仅仅是为了转储你的表。