为什么 GORM 的 AutoMigrate 总是在每次运行时更改时间戳(0)列,如何防止这种情况发生?

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

我将 GORM 与 PostgreSQL 一起使用,并且遇到一个问题:GORM 的 AutoMigrate 函数每次运行时总是尝试更改时间戳(0)列类型,即使列的类型已经正确。

这是我的模型的示例:

type User struct {
    ID        uint      `gorm:"type:serial"`
    CreatedAt time.Time `gorm:"type:timestamp(0);default:CURRENT_TIMESTAMP"`
    UpdatedAt time.Time `gorm:"type:timestamp(0);default:CURRENT_TIMESTAMP;autoUpdateTime"`
}

CreatedAt 和 UpdatedAt 都定义为时间戳(0),但每次我运行 AutoMigrate 时,GORM 都会尝试更改这些列,即使它们在数据库中已经是时间戳(0)。

我想防止 GORM 在每次 AutoMigrate 运行期间更改这些时间戳 (0) 列。我不想经常处理像这样不必要的 ALTER TABLE 操作

ALTER TABLE "users" ALTER COLUMN "updated_at" TYPE timestamp(0) USING "updated_at"::timestamp(0)
go go-gorm
1个回答
0
投票

一个可能的解决方法是使用指针,但这可以使这些字段可为空,以防止添加非空标签在我看来应该有效。

type User struct {
ID        uint      `gorm:"type:serial"`
CreatedAt *time.Time `gorm:"type:timestamp(0);default:CURRENT_TIMESTAMP"`
UpdatedAt *time.Time `gorm:"type:timestamp(0);default:CURRENT_TIMESTAMP;autoUpdateTime"`

}

不为空:

type User struct {
ID        uint      `gorm:"type:serial"`
CreatedAt *time.Time `gorm:"type:timestamp(0);default:CURRENT_TIMESTAMP;not null"`
UpdatedAt *time.Time `gorm:"type:timestamp(0);default:CURRENT_TIMESTAMP;autoUpdateTime;not null"`

}

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