2017-02-21 170 views
2

我正在嘗試更新特定行的Jsonb列值。 我跑的查詢更新golang中的Jsonb列

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

能正常工作的pgAdmin3。

當我試圖在我的Go代碼中做同樣的事情。蔭收到錯誤: 「PQ:類型JSON無效的輸入語法」

我的Go代碼:

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( 'UPDATE instruction.file SET 「細節」=(jsonb_set( 「詳細信息」,'{ 「UploadBy」}」,$ 1 :: jsonb,真) )WHERE id = $ 2',uname,「820」)'你當然試過了,錯誤是一樣的嗎?.. –

+0

是的。 Iam得到相同的錯誤(json類型的輸入語法無效)。任何想法如何解決這個問題? – Hardy

+0

不是真的...似乎想要將smth轉換爲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

我設法刪除錯誤:

「UNAME」 是字符串類型,當創建像:

uname := "[email protected]" 

它應該是一個JSON變量。必須創建像:

uname := `"[email protected]"` 

我不知道這是否是正確的答案。但它的工作。