我将 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)
一个可能的解决方法是使用指针,但这可以使这些字段可为空,以防止添加非空标签在我看来应该有效。
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"`
}