我正在尝试重构代码,以便使用 pgx 而不是 pq 连接到 postgres DB。我已经尝试了很多东西,但我不断收到错误:不正确的二进制数据格式 (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, stringB, integer64, stringArray}
ix++
}
_, err = txn.CopyFrom(context.Background(), pgx.Identifier{table},
[]string{"id", "client_id", "channel_id", "feature"}, pgx.CopyFromRows(rows))
编辑:我从 pgx 文档中得到提示:CopyFrom 要求所有值都使用二进制格式。
问题是我的 id(在上面的代码中记为 stringA)。它被创建为:
stringA := uuid.New().String()
我用 pgtype 增强了它,现在它就像一个魅力:
newStringA := &pgtype.UUID{}
_ := idPgtype.Set(stringA)