2017-02-21 4 views
2

特定の行のJsonb列の値を更新しようとしています。 私は、クエリゴランのJsonb列を更新する

UPDATE instruction.file SET "details" = (jsonb_set("details",'{"UploadBy"}','"[email protected]"'::jsonb, true)) WHERE id=820; 

これはpgAdmin3で正常に動作を実行しました。

私はGoコードで同じことを試みました。 IAMがエラーを取得: "PQ:タイプJSONのための無効な入力構文"

マイゴーコード:

func main() { 
    uname := "[email protected]" 

    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 
} 
+0

'Db.Exec( '=(jsonb_set UPDATE SET instruction.file "詳細"( "詳細"、' { "UploadBy"}」、$ 1 :: jsonb、真) )WHERE id = $ 2 '、uname、 "820")もちろん、エラーは同じですか? –

+0

はい。 Iamが同じエラーを受け取っています(json型の入力構文が無効です)。どのようにこれを解決するためのアイデア? – Hardy

+0

実際には... goはスムースをjsonに変換しようとしていますか? –

答えて

1

使用to_jsonb

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

これは完璧に動作します。 Clodoaldo Netoありがとうございます。 – Hardy

0

私はエラーを取り除くために管理:

"は、una​​meは、" 文字列型でした、

uname := "[email protected]" 

これはjson変数である必要があります。

uname := `"[email protected]"` 

正しい答えかどうかわかりません。しかし、それは動作します。

関連する問題