我是golang-migrate的新用户。
我已经运行了一些成功执行的迁移。
我处于开发模式,所以我想在psql
shell 中重新运行迁移,并在连接到我的数据库后,我执行了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. 修复和强制版本。
这个错误是关于什么的,我该如何解决?
我决定使用gorm作为我的 ORM。我想使用golang-migrate/migrate 进行迁移,因为看起来 GORM 没有版本化迁移文件。我宁愿使用 CLI 进行迁移,而不是使用自动迁移。
我阅读了 gorm 文档,但我没有看到 gorm 如何将模型转换为 SQL 表。有没有关于为 gorm 生成的 SQL 表的任何示例或文档?(尤其是类型或关联如何映射到 SQL)
按照文档中的步骤进行
$ 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) 在我的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) 我正在尝试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) 我有一个简单的应用程序,使用 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) 我尝试在 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)
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 上则不行。任何线索或解决方案都会非常有帮助。
虽然我不是一个支持 Golang 的开发人员,但我试图在 JSON 验证期间限制结构体数组中的重复元素。
type Test struct {
Test []*string `json:"test" validate:"required,min=1,max=10,excludes=duplicate"`
}
Run Code Online (Sandbox Code Playgroud)
我正在使用排除参数,但它对我不起作用。
我想使用 socket.io 将数据从 Android 发送到 Golang。我用 Nodejs 正确地做到了但是现在,我想用 Go 来做。我找不到简单的例子。我该怎么做?
请帮助我理解为什么“ 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。-错误
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 ×11
golang-migrate ×11
postgresql ×3
migration ×2
android ×1
build ×1
go-gorm ×1
go-modules ×1
migrate ×1
package ×1
socket.io ×1
ubuntu-22.04 ×1
validation ×1
websocket ×1