数组 Varchar (psql) 到数组字符串 (golang)

Posted

技术标签:

【中文标题】数组 Varchar (psql) 到数组字符串 (golang)【英文标题】:Array Varchar (psql) to array string (golang) 【发布时间】:2016-05-24 04:23:51 【问题描述】:

我想知道如何在我的 psql 数据库中以数组字符串的形式获取我的数组 varchar,以便在 json 中呈现它。

我确实是这样做的

在创建我的表时,我会这样创建我的列:

tags varchar(50)[] default NULL

当我使用我的选择请求在 golang 中获取它时:

var rowtags []uint8
err = rows.Scan(&rowtags)
if err != nil 
    log.Fatal(err)

我尝试制作一个将 uint8[] 转换为 string[] 的函数

func Uint8toString(array []uint8) []string 

    var ret = make([]string, len(array))
    for i := 0; i < len(array); i++
        ret[i] = string(array[i])
    
    return (ret)

所以我应用了我的 var rowstag 的功能

var tags := Uint8toString(rowtags)

当我渲染 var 标签所在的结构时,我明白了

  "Tags": [
    "",
    "#",
    "c",
    ",",
    "#",
    "c",
    ",",
    "#",
    "c",
    "o",
    "u",
    "c",
    "o",
    "u",
    ",",
    "#",
    "c",
    "d",
    ""
  ],

我当然想要

  "Tags": [
    "#c",
    "#c",
    "#coucou",
    "#cd"
  ],

谢谢你的帮助,我在golang上的时间很短,我没有找到解决方案。

【问题讨论】:

【参考方案1】:

首先,为什么会有一个名为tags 的列包含多个tag 值?让另一个表与标签列当前所在的表具有外键,这样每个标签值都是它自己的行不是更好吗?如果你有这个,你应该能够做一些非常简单的事情,比如:

rows := db.QueryRow("SELECT tag from tags_table where foreign_key = 123")
var asSlice []string
err := row.Scan(&asSlice) 

如果您必须将其全部放在一列中,是否可以将其存储为 JSON?然后你可以使用“encoding/json”包做一些简单的事情,比如:

func Uint8toString(array []uint8) []string 
     var stringArray []string
     json.Unmarshal(array, &stringArray)
     return stringArray

虽然我认为您应该重新考虑实现上述标签列的方式,但您也可以使用以下逻辑将其解析为字符串,但它假定格式将始终与您发布的内容相似:

func Uint8toString(array []uint8) []string 
    stringNoBrackets := string(array[1:len(array)-1])
    return strings.Split(stringNoBrackets,",")

【讨论】:

是的,我也认为我需要重新考虑实现标签列的方式,但我真的很想知道将 varchar 数组转换为字符串数组的最佳方法,但感谢您的回答 底部的代码示例应该为您的结果生成一个字符串数组...可能有更简单的方法,但我不知道您的查询是什么样的,您是否尝试过传入引用 []string 而不是对 []unit8 的引用进入扫描? (参见第一个代码 sn-p)...这仍然可能有效,但不确定您的查询或表是什么样的 如果你尝试扫描到 *[]string,你会得到一个错误:sql: Scan error on column index 0: unsupported Scan, storing driver.Value type []uint8 into type *[]string。 Scan 将从数据库中读取的列仅转换为常见 Go 类型的子集,不包括 []string。

以上是关于数组 Varchar (psql) 到数组字符串 (golang)的主要内容,如果未能解决你的问题,请参考以下文章

查询jsonb PSQL中数组元素的where子句

仅限 pSQL 数组字段

在 psql 中创建“计数器”数组

plpgsql text[] varchar[] 数组不工作

选择表单类型的数组到字符串转换错误

在 athena/presto 中将数组(varchar)转换为 varchar