标签: golang-migrate

使用 golang-migrate 时出现脏数据库版本错误

我是golang-migrate的新用户。

我已经运行了一些成功执行的迁移。

我处于开发模式,所以我想在psqlshell 中重新运行迁移,并在连接到我的数据库后,我执行了drop database schema_migrations

现在的问题是,当我运行执行迁移的代码时(如下所示)


func RunMigrations() {
    m, err := migrate.New(
        "file://db/migrations",
        "postgres://postgres:postgres@localhost:5432/mydatabase?sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }
    if err := m.Up(); err != nil {
        if err.Error() == "no change" {
            log.Println("no change made by migration scripts")
        } else {
            log.Fatal(err)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

脏数据库版本 2. 修复和强制版本。

这个错误是关于什么的,我该如何解决?

migration go golang-migrate

10
推荐指数
1
解决办法
9388
查看次数

使用 golang-migrate/migrate 进行 Gorm 迁移

我决定使用gorm作为我的 ORM。我想使用golang-migrate/migrate 进行迁移,因为看起来 GORM 没有版本化迁移文件。我宁愿使用 CLI 进行迁移,而不是使用自动迁移。

我阅读了 gorm 文档,但我没有看到 gorm 如何将模型转换为 SQL 表。有没有关于为 gorm 生成的 SQL 表的任何示例或文档?(尤其是类型或关联如何映射到 SQL)

migration go go-gorm golang-migrate

8
推荐指数
1
解决办法
473
查看次数

无法在 Ubuntu 20.4 上安装 golang 迁移库

按照文档中的步骤进行

$ curl -L https://packagecloud.io/golang-migrate/migrate/gpgkey | apt-key add -
$ echo "deb https://packagecloud.io/golang-migrate/migrate/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/migrate.list
$ apt-get update
$ apt-get install -y migrate
Run Code Online (Sandbox Code Playgroud)

我在第一步中遇到的错误是

    sudo curl -L https://packagecloud.io/golang-migrate/migrate/gpgkey | apt-key add -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0E: This command can only be used by root.
  0     0    0     0    0     0 …
Run Code Online (Sandbox Code Playgroud)

migrate go golang-migrate

7
推荐指数
2
解决办法
1万
查看次数

golang-migrate 无法找到 postgres 驱动程序

在我的internal/platform/database/database.go


import (
    "github.com/golang-migrate/migrate"
    "github.com/jmoiron/sqlx"
    _ "github.com/lib/pq"
)

func RunMigrations() error {
    m, err := migrate.New(
        "file://schema",
        "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable")
    if err != nil {
        return errors.Wrap(err, "error creating migrations object")
    }
Run Code Online (Sandbox Code Playgroud)

该函数是从 my 调用的,cmd/my-api/main.go如下所示:


import (
    _ "github.com/golang-migrate/migrate/v4/database/postgres"
    _ "github.com/golang-migrate/migrate/v4/source/file"
    "github.com/jmoiron/sqlx"
    _ "github.com/lib/pq"
    "github.com/myrepo/myproject/internal/platform/database"
)

    // =========================================================================
    // Executing migrations
    if err := database.RunMigrations(); err != nil {
        log.Fatal(err)
    }
Run Code Online (Sandbox Code Playgroud)

虽然我postgres两个文件中导入驱动程序,_ "github.com/lib/pq"

运行程序失败,如下:

error creating migrations object: source driver: unknown driver file (forgotten …
Run Code Online (Sandbox Code Playgroud)

postgresql go golang-migrate

6
推荐指数
1
解决办法
6300
查看次数

可以将 golang-migrate 与 go 的 embed 功能一起使用吗?

我正在尝试golang-migrate将 sql 文件迁移到我的 postgresql 数据库中。我可能做错了,但是当我运行命令进行迁移时,它说找不到方案:

 $ go run ./cmd/  migrate
2022/04/05 16:20:29 no scheme
exit status 1

Run Code Online (Sandbox Code Playgroud)

这是代码:

  // package dbschema contains the database schema, migrations, and seeding data.

    package dbschema
    
    import (
        "context"
        _ "embed" // Calls init function.
        "fmt"
        "log"
    
        "github.com/golang-migrate/migrate/v4"
        "github.com/golang-migrate/migrate/v4/database/postgres"
        "github.com/jmoiron/sqlx"
        "github.com/jonleopard/bootstrap/pkg/sys/database"
        _ "github.com/lib/pq"
    )
    
    var (
        //go:embed sql/000001_schema.up.sql
        schemaDoc string
    
        //go:embed sql/seed.sql
        seedDoc string
    )
    
    // Migrate attempts to bring the schema for db up to date with the migrations
    // defined in …
Run Code Online (Sandbox Code Playgroud)

postgresql go golang-migrate

6
推荐指数
1
解决办法
3954
查看次数

如何使用 golang-migrate 进行迁移

我有一个简单的应用程序,使用 golang-migrate/migrate 和 postgresql 数据库。但是,我认为当我调用函数时会收到错误,Migration因为我的 sourceURL 或 databaseURLmigrate.New()是无效的内存地址或 nil 指针。

但我不确定为什么我的sourceURL或databaseURL会导致错误-我将sourceURL存储为file:///database/migration存储sql文件的目录,将databaseURL存储为postgres://postgres:postgres@127.0.0.1:5432/go_graphql?sslmode=disable在我的Makefile中定义的目录。

我的Makefile是这样的

migrate:
    migrate -source file://database/migration \
            -database postgres://postgres:postgres@127.0.0.1:5432/go_graphql?sslmode=disable up

rollback:
    migrate -source file://database/migration \
            -database postgres://postgres:postgres@127.0.0.1:5432/go_graphql?sslmode=disable down

drop:
    migrate -source file://database/migration \
            -database postgres://postgres:postgres@127.0.0.1:5432/go_graphql?sslmode=disable drop

migration:
    migrate create -ext sql -dir database/migration go_graphql

run:
    go run main.go

Run Code Online (Sandbox Code Playgroud)

然后,我的main.go就像下面这样。

func main() {
    ctx := context.Background()

    config := config.New()

    db := pg.New(ctx, config)
    println("HEL")

    if err := db.Migration(); err …
Run Code Online (Sandbox Code Playgroud)

postgresql go golang-migrate

3
推荐指数
1
解决办法
7421
查看次数

Golang 迁移安装在 Ubuntu 22.04 上失败,并出现以下 GPG 错误:公钥不可用:NO_PUBKEY B53DC80D13EDEF05

我尝试在 Ubutu 22.4 上安装 Golang Migrate,但在尝试执行命令时出现以下错误。

错误公钥不可用:NO_PUBKEY B53DC80D13EDEF05

这是我到目前为止所尝试过的,它在尝试执行第二个命令 - sudo-apt-get update 时抛出“未找到公钥”消息。

1.

curl -s https://packagecloud.io/install/repositories/golang-migrate/migrate/script.deb.sh | sudo bash
Run Code Online (Sandbox Code Playgroud)
  1. sudo apt-get 更新

sudo apt-get install migrate
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令手动添加密钥,但在执行 sudo apt-get update 时仍然显示相同的错误。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B53DC80D13EDEF05
Run Code Online (Sandbox Code Playgroud)

上述 3 个命令在 Ubuntu 20.4 上运行良好,但在 22.4 上则不行。任何线索或解决方案都会非常有帮助。

go golang-migrate ubuntu-22.04

3
推荐指数
1
解决办法
1958
查看次数

如何避免json验证中slice中的重复元素?

虽然我不是一个支持 Golang 的开发人员,但我试图在 JSON 验证期间限制结构体数组中的重复元素。

type Test struct {
Test []*string `json:"test" validate:"required,min=1,max=10,excludes=duplicate"`
}
Run Code Online (Sandbox Code Playgroud)

我正在使用排除参数,但它对我不起作用。

validation go golang-migrate

1
推荐指数
1
解决办法
926
查看次数

如何使用 socket.io 连接 Golang 和 Android?

我想使用 socket.io 将数据从 Android 发送到 Golang。我用 Nodejs 正确地做到了但是现在,我想用 Go 来做。我找不到简单的例子。我该怎么做?

android go websocket socket.io golang-migrate

-2
推荐指数
1
解决办法
1081
查看次数

在“ package main”中重复的“ func main”是否错误,为什么错误?

请帮助我理解为什么“ package main”中重复的“ func main”是错误的。VC中的错误:“在此块中重新声明了main”。


// $ tree
// .
// ??? main.go
// ??? second.go

// ```go build main.go```
// or 
// ```go build .```


// file: main.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("this is file MAIN")
}

// file: second.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("this is file SECOND")
}

Run Code Online (Sandbox Code Playgroud)

我可以构建/运行它:go build / run main.go-正确的go build / run。-错误

program-entry-point build package go golang-migrate

-3
推荐指数
1
解决办法
135
查看次数

Execute the program every 5 minutes with gocron

I need to run my Co program continuously with five minute interval.

I tried using gocron but the program is not giving any output.

func hi() {
    fmt.Println("hi")
}
func main() {
    gocron.Every(5).Minute().Do(hi)
}
Run Code Online (Sandbox Code Playgroud)

I expect this to run and print "hi" at every 5 min interval.

go golang-migrate go-modules

-4
推荐指数
1
解决办法
62
查看次数