问题描述
我正在尝试重构代码,以便使用 pgx 而不是 pq 连接到 postgres 数据库。 我已经尝试了很多方法,但我不断收到错误:不正确的二进制数据格式 (SQLSTATE 22P03)。请在下面找到原始工作代码和我的重构尝试。我做错了什么?
// pq code
stmt,_ := txn.Prepare(pq.CopyIn(table,"id","client_id","channel_id","feature"))
for _,user := range users{
_,err = stmt.Exec(stringA,stringB,integer64,pq.Array(stringArray))
}
//pgx code
rows := make([][]interface{},len(users))
ix := 0
for _,user := range users{
rows[ix] = []interface{}{stringA,stringArray}
ix++
}
_,err = txn.CopyFrom(context.Background(),pgx.Identifier{table},[]string{"id","feature"},pgx.CopyFromRows(rows))
编辑:我从 pgx 文档中得到了一个提示:CopyFrom 要求所有值都使用二进制格式。
问题是我的 id(在上面的代码中记为 stringA)。它被创建为:
stringA := uuid.New().String()
我用 pgtype 增强了它,现在它就像一个魅力:
newStringA := &pgtype.UUID{}
_ := idPgtype.Set(stringA)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)