使用 golang-migrate/migrate 进行 Gorm 迁移

Posted

技术标签:

【中文标题】使用 golang-migrate/migrate 进行 Gorm 迁移【英文标题】:Gorm Migration using golang-migrate/migrate 【发布时间】:2021-02-07 02:44:42 【问题描述】:

我决定使用gorm 作为我的 ORM。我想使用golang-migrate/migrate 进行迁移,因为看起来 GORM 没有版本化的迁移文件。我宁愿使用 CLI 进行迁移,而不是使用自动迁移。

我阅读了 gorm 文档,但没有看到 gorm 如何将模型转换为 SQL 表。有没有关于为 gorm 生成的 SQL 表的示例或文档? (尤其是类型或关联如何映射到 SQL)

【问题讨论】:

这是你要找的gorm.io/docs/migration.html#Auto-Migration吗?它说:“AutoMigrate 将创建表,缺少外键、约束、列和索引。如果现有列的大小、精度、可为空发生更改,它将更改现有列的类型。它不会删除未使用的列以保护您的数据。”跨度> 嘿伙计!您是否设法使用 CLI 运行迁移? 【参考方案1】:

阅读 gorm 文档,但我没有看到 gorm 如何将模型转换为 SQL 表。有没有关于为 gorm 生成的 SQL 表的示例或文档? (尤其是类型或关联如何映射到 SQL)

看Declaring Models段:

列数据类型,喜欢使用兼容的通用类型,例如:bool、int、uint、float、string、time、bytes,适用于所有数据库,可以和其他标签一起使用,比如not null、size , autoIncrement... 指定数据库数据类型如varbinary(8) 也支持,使用指定数据库数据类型时,需要是全数据库数据类型,例如:MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT

例如

type Post struct 
  ID     uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
  Title  string
  Tags   pq.StringArray `gorm:"type:text[]"`

??另外,请看Customize Data Types段落。

【讨论】:

以上是关于使用 golang-migrate/migrate 进行 Gorm 迁移的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份