使用 golang-migrate 和 docker postgres 时出现“无更改”错误

问题描述 投票:0回答:1

我有一个 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

如何修复此错误?

go golang-migrate
1个回答
0
投票

这是因为你想删除不存在的表。 如何修复:

首先,您应该将一些内容上传到数据库

它应该看起来像这样:

func Initial() {

    if err := m.Up(); err != nil {
            log.Fatalln("Database migration(up) failed:", err)
        }
}

接下来,运行迁移。

附注迁移 - 不仅仅是为了转储你的表。

© www.soinside.com 2019 - 2024. All rights reserved.