在Postgresql中存储和检索Golang切片,结构和切片的结构

时间:2017-12-08 16:24:13

标签: postgresql go

假设我有一个名为PEOPLE,它存储Person行。但是,Person包含切片结构结构切片,即 Superpower ,< em> Vehicle 和 FriendList 字段。

如何使用 Golang Postgresql 中存储和检索这些值?我找不到任何与此问题相关的实用教程。使用自定义数据类型,JSON或ORM方法,或构建自定义函数来处理这些?很多意见,但我仍然无法找到解决这个问题的工作方法,请帮忙。

我正在使用Ozzo-dbx,但欢迎任何解决方案。

有人可以提供一个有效的例子吗?很抱歉,如果这个新手问题让你烦恼,但我已经尝试了几天,并且一直都在失败......(T_T)

type Transport struct {
    Brand string
    Size  int
}

type Friend struct {
    Name         string
    IsProgrammer bool
}

type Person struct {
    ID         int
    Name       string
    Superpower []string   //slice
    Vehicle    Transport  //struct
    FriendList []Friend   //slice of struct
}

1 个答案:

答案 0 :(得分:1)

在大多数情况下,您应该为Superpowers,Vehicles和Friends创建单独的表格。

如果其中一个表与People表之间的关系是多对一或一对一,则可以向其添加外键。如果关系是多对多的,你应该创建一个链接表来保存相关记录的fkeys。

要存储数据,您可以使用简单的SQL查询字符串和database/sql单独插入/更新每条记录。

之后,您可以创建表视图,将每个人所需的数据聚合到一行中,这样就不会使用复杂的SQL字符串污染Go代码。然后在Go中定义简单的SQL选择查询字符串,并使用database/sql执行它们。