postgresql - 如何在 golang 中使用 mattes/migrate?

标签 postgresql go migration sqlx

我一直在尝试使用 mattes/migrate包,但我似乎无法让它真正做任何事情。数据库在 postgres 上运行,我通过 sqlx 与它交互.

我已经阅读了 github 上的自述文件,并应用了以下代码:

// use synchronous versions of migration functions ...
allErrors, ok := migrate.UpSync("postgres://<my_url_string>", "./app/database/migrations")
if !ok {
  fmt.Println("Oh no ...")
  // do sth with allErrors slice
}

我的架构是这样启动的:

//sqlx's initiated DB is imported in the database package

func SyncSchemas() {
  database.DB.MustExec(schema)
}

var schema =
  `CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

   CREATE TABLE IF NOT EXISTS examples (
     created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
     deleted_at text DEFAULT NULL,
     id UUID PRIMARY KEY UNIQUE NOT NULL DEFAULT uuid_generate_v4()
   );`

type Example struct {
  ID            string      `json:"id" db:"id"`
  CreatedAt     time.Time   `json:"created_at" db:"created_at"`
  DeletedAt     *time.Time  `json:"deleted_at" db:"deleted_at"` 
}

它运行没有错误,但目前它似乎只做这些。它不应该跟踪我的模式或其他什么吗?我以前用过 gorm作为我的 ORM,我只需要在模式上运行 autoMigrate(),它会在我更改模式时自动创建和应用迁移。我想要与 mattes/migrate 相同的功能,但我似乎找不到说明如何使用它的示例或教程。

我应该怎么做?

最佳答案

每当您使用 Golang 编写代码时,一个建议是检查错误以这种方式进行

if allErrors, ok := migrate.UpSync("postgres://<my_url_string>", "./migrations"); !ok {
  fmt.Println("Oh no ...", ok)
  // do sth with allErrors slice
}

因为我不知道你的错误是什么至少通过这种方式你可以检查你的错误是什么。

关于postgresql - 如何在 golang 中使用 mattes/migrate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42088562/

相关文章:

android - 迁移以将新数据行插入 Room DB

mysql - filemaker pro通过php导出和导入到mysql

python - SQLAlchemy 长时间运行的脚本 : User was holding a relation lock for too long

go - 初学者 Golang 序列说明

ruby-on-rails - 安装 do_postgres (0.10.16) 时发生错误 Bundler 无法继续。确保 'gem install do_postgress -v ' 0.10.16' 成功

string - 遍历 go 字符串并从 go 中的字符创建字符串

go - 如何获得索引总数

python - 您如何配置 Django 3 以与 MySql 5 一起使用?

postgresql - 我怎样才能发现 PostgreSQL 中的 bytea 列包含任何数据?

c# - Entity Framework Core : Npgsql. PostgresException: 23505: 重复键值违反唯一约束