Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 将客户端UUID转换为SQL UUID_Postgresql_Go - Fatal编程技术网

Postgresql 将客户端UUID转换为SQL UUID

Postgresql 将客户端UUID转换为SQL UUID,postgresql,go,Postgresql,Go,我正在使用go和包uuid生成类型为[16]字节的uuid。但是,当我尝试将该uuid插入类型为uuid的postgres列时,我得到一个错误转换参数$1 type:unsupported type[16]uint8,一个数组。显然,在将uuid插入数据库之前,我应该先转换客户端上的uuid。我该怎么做?我应该把它转换成什么类型 简而言之:在postgres中,什么go数据类型将与uuid一起工作?感谢@sberry的链接,我发现了成功。以下是代码片段,以供您参考(使用PostgreSQL 9.

我正在使用
go
和包
uuid
生成类型为
[16]字节的uuid
。但是,当我尝试将该uuid插入类型为
uuid
postgres
列时,我得到一个错误
转换参数$1 type:unsupported type[16]uint8,一个数组。显然,在将uuid插入数据库之前,我应该先转换客户端上的uuid。我该怎么做?我应该把它转换成什么类型


简而言之:在
postgres
中,什么
go
数据类型将与
uuid
一起工作?

感谢@sberry的链接,我发现了成功。以下是代码片段,以供您参考(使用PostgreSQL 9.5数据库):


您可以从尝试使用切片而不是数组开始。只需将
[:]
添加到Go uuid即可。例如,
db.Insert(“blah…”,myUUID[:])
您也可以尝试使用字符串格式的uuid。由于我使用的每个uuid库都实现了Stringer接口,如果切片不工作,我也会尝试
myUUID.String()
。@sberry转换到
slice
会产生不同的错误:
pq:编码“UTF8”的字节序列无效:0x83
假设这是正确的项目,这可能会有帮助:Oops。因此,我使用go.uuid,但我在模型中将uuid定义为
[16]字节
,因为这是文档中的类型,所以将其更改为uuid.uuid数据类型解决了问题,无需任何转换。很抱歉
import (
    "database/sql"
    "net/http"

    "github.com/google/uuid"
)

type Thing struct {
    ID     uuid.UUID `json:"-" sql:",type:uuid"`
    Name   string    `json:"name"`
}

// For a database table created as such:
// CREATE TABLE things ( 
// id UUID PRIMARY KEY DEFAULT gen_random_uuid(), 
// name TEXT DEFAULT ''::text
// )

func selectThingssSQL() ([]Thing, error) {
    things := make([]Thing, 0)

    rows, err := db.Query("SELECT id, name FROM things")
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    for rows.Next() {
        t := &Thing{}
        if err := rows.Scan(&t.ID, &t.Name); err != nil {
            return nil, err
        }
        things = append(things, *t)
    }

    return things, nil
}