Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql postgres的sql类型(映射)无效_Postgresql_Go_Jsonb_Go Gorm - Fatal编程技术网

Postgresql postgres的sql类型(映射)无效

Postgresql postgres的sql类型(映射)无效,postgresql,go,jsonb,go-gorm,Postgresql,Go,Jsonb,Go Gorm,我试图使用gorm将嵌套结构保存到postgres中,但我的map[string]*InnerStruct类型遇到了一些问题 我想在postgres中将我的地图类型存储为JSONB,因此我定义了一个类似于类似示例中建议的Scanner/Valuer: type SomeMapType映射[string]*InnerStruct 类型StoreStruct struct{ 戈姆模型 Id字符串`gorm:“类型:uuid;主键”` AccountID字符串 SomeMapType SomeMapT

我试图使用gorm将嵌套结构保存到postgres中,但我的
map[string]*InnerStruct
类型遇到了一些问题

我想在postgres中将我的地图类型存储为JSONB,因此我定义了一个类似于类似示例中建议的Scanner/Valuer:

type SomeMapType映射[string]*InnerStruct
类型StoreStruct struct{
戈姆模型
Id字符串`gorm:“类型:uuid;主键”`
AccountID字符串
SomeMapType SomeMapType`gorm:“列:缓存,类型:jsonb”`
}
var\udriver.Valuer=SomeMapType{}
var_u-sql.Scanner=&SomeMapType{}
func(smt SomeMapType)Value()(driver.Value,错误){
返回json.Marshal(smt)
}
func(smt*SomeMapType)扫描(值接口{})错误{
b、 确定:=值。([]字节)
如果!好的{
返回错误。新建(“对[]字节的类型断言失败”)
}
返回json.Unmarshal(b和smt)
}
但当我尝试创建这样的表时:

err:=db。
CreateTable(StoreStruct{})。
表(tableName)。错误)
出现恐慌:
panic:postgres[recovered]的sql类型SomeMapType(map)无效。

看起来这种情况甚至发生在调用我的Valuer/Scanner实现之前

是否无法在要使用gorm保存到DB的结构上存储
map
字段?

我相信我已经看到过一些例子,它们似乎与
map[string]interface{}
一起工作,所以我不确定为什么我的场景不同?

我的问题是没有包括SQL类型标记注释

进行以下更改修复了我的问题:

类型StoreStruct struct{
戈姆模型
Id字符串`gorm:“类型:uuid;主键”`
AccountID字符串
SomeMapType SomeMapType`gorm:“列:缓存”sql:“类型:jsonb”`
}

确保在SomeMapType的结构标记中添加一个结束标记。“。是的,很抱歉在匿名化code@User-Upvotedon'tTank的链接没有那么重要,因为它不处理
映射[string]SomeType
,我可以为其他类型实现Scanner/Valuer。