【问题标题】:Updating Jsonb column in golang在 golang 中更新 Jsonb 列
【发布时间】:2017-02-21 07:45:36
【问题描述】:

我正在尝试更新特定行的 Jsonb 列值。 我运行了查询

UPDATE instruction.file SET "details" = (jsonb_set("details",'{"UploadBy"}','"test@test.com"'::jsonb, true)) WHERE id=820;

这在 pgAdmin3 中运行良好。

当我尝试在我的 Go 代码中做同样的事情时。我收到错误消息:“pq:json 类型的输入语法无效”

我的 Go 代码:

func main() {
    uname := "test@test.com"

    err := Init() //Db init
    if err != nil {
        fmt.Println("Error", err)
        return
    }

    result, err1 := Db.Exec("UPDATE instruction.file SET \"details\" = (jsonb_set(\"details\",'{\"UploadBy\"}',$1::jsonb, true)) WHERE id=$2", uname, "820")
    if err1 != nil {
        fmt.Println("Error", err1)
        return
    }
    n, err1 := result.RowsAffected()
    if err1 != nil {
        fmt.Println("Error", err1)
        return
    }

    if n != 1 {
        err1 = errors.New("Unable to update instruction.file")
        fmt.Println("Error", err1)
        return
    }

    fmt.Println("Success")
    return
}

【问题讨论】:

  • Db.Exec('UPDATE instruction.file SET "details" = (jsonb_set("details",'{"UploadBy"}',$1::jsonb, true)) WHERE id=$2', uname, "820")你当然试过了,错误是一样的?..
  • 是的。我收到相同的错误(json 类型的输入语法无效)。知道如何解决这个问题吗?
  • 不是真的...似乎 go 想要将 smth 转换为 json?..
  • 提示:包含引号的字符串文字最好用反引号 (`) 分隔。它避免了常见的语法错误,至少使您的代码更易于阅读

标签: postgresql go


【解决方案1】:

使用to_jsonb:

Db.Exec(`
    UPDATE instruction.file
    SET details = jsonb_set("details", '{"UploadBy"}', to_jsonb($1::text), true)
    WHERE id = $2
    `, uname, "820"
)

【讨论】:

  • 你先生,真是天赐之物!
【解决方案2】:

我设法消除了错误:

"uname" 是字符串类型,创建时如下:

uname := "test@test.com"

它应该是一个 json 变量。必须像这样创建:

uname := `"test@test.com"`

我不知道这是否是正确的答案。但它有效。

【讨论】:

    猜你喜欢
    • 2017-08-23
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2018-05-03
    相关资源
    最近更新 更多