【问题标题】:Define Postgresql Column as Serial in go-pg ORM在 go-pg ORM 中将 Postgresql 列定义为串行
【发布时间】:2021-08-01 04:29:51
【问题描述】:

我想在 postgresql 数据库中创建不同的表。现在我正在使用 go-pg ORM 包。我已经使用以下代码找到了一种可能的方法:

func set_up_tables(db *pg.DB) error {
    models := []interface{}{
        (*User)(nil),
        (*Account)(nil),
        (*Transaction)(nil),
    }

    for _, model := range models {
        err := db.Model(model).CreateTable(&orm.CreateTableOptions{
            IfNotExists: true,
        })
        if err != nil {
            return err
        }
    }
    return nil
}

现在让我们看看我这样定义的用户结构:

type User struct {
    UserId    string `json:"userId"`
    Email     string `json:"emailAddress"`
    Firstname string `json:"firstName"`
    Lastname  string `json:"lastName"`
    Address   string `json:"address"`
}

我希望 userId 列是一个 Serial,这意味着它是唯一的,而不是 null,并且是自动递增的。 有没有办法使用 ORM 或 Go 代码来做到这一点?我已经能够在 pgadmin 中手动更改它,但是还有更多带有 Id 的结构应该更改,我不想手动更改它。 另外一个问题是,这是实现它的好方法吗?

【问题讨论】:

标签: postgresql go orm go-pg


【解决方案1】:

如果你review the documentation,你会发现你的模型需要使用pg struct 标签,而不是json 标签;并且 PG 是一个 ORM,但不是一个迁移工具。您不使用 PG 来定义您的架构,只是将您的架构映射到您的数据结构。

【讨论】:

  • 感谢您的帮助。我不确定我是否正确理解了您的答案。我将使用什么来定义我的模式,是否有包或 SQL 或其他东西?对于pg 标签,是的,我看到了它们,但是我要定义的一个结构如何为用户的概念定义两个不同的结构?一个带有json标签用于api通信,一个用于db通信?
  • 我找到了一个包golang migrate 来迁移并使用golang(或多或少)启动一个数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2018-02-04
  • 2019-02-17
  • 2017-05-03
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
相关资源
最近更新 更多