【发布时间】:2021-08-13 21:06:59
【问题描述】:
我已经使用 Gorm 一年了,它一直运行良好。但是,我正在尝试重构我的数据库架构,并且由于某种原因,Gorm 没有按预期迁移。我的应用程序是一个多租户应用程序,所以我有一个客户端 ID 的概念,它使用 POSTGRES Db(“PostgreSQL 13.3 on x86_64-pc-linux-gnu,由 Debian clang 版本 10.0.1 编译,64 位” )。问题是我愚蠢地用我们公司名称的前缀命名我的一些结构/列,让我们称之为公司 COM。因此,例如,我的客户端结构 WAS COMClient,现在它只是客户端(为简单起见,我删除了一些数据)
类型客户端结构{ 标识字符串 名称字符串 地址字符串 }
然后我有一个 Base 结构如下
类型 BaseClient 结构 {
标识字符串
ClientID 字符串gorm:"type:uuid"
客户 *客户
}
同样,基本结构具有 COMClientID 和 COMClient 字段。这个基本客户端结构将用于我的所有其他结构,我需要将外键返回到我的客户端表。例如, 我的用户结构是:
类型 ClientUser 结构 {
基础客户端
名字字符串
姓氏字符串
电子邮件字符串gorm:"uniqueIndex"
密码字符串
}
简而言之,我正在重构 COMClient => Client。然后,当应用程序启动时,我会迁移所有结构,如下所示:
db.AutoMigrate(&Client{}) db.AutoMigrate(&ClientUser{}) 等等……
问题在于,没有在每个具有客户端表外键的表中创建列 client_id。这些表都有旧客户端表“com_clients”的外键。
但是,如果我在一个新的数据库上运行我的整个迁移,一切都会按原样创建...
几个小时以来,我一直在琢磨为什么有些表创建了列而有些没有。
谢谢
【问题讨论】: