2017-02-21 1 views
2

특정 행에 대한 Jsonb 열 값을 업데이트하려고합니다. 나는 쿼리골란의 Jsonb 열 업데이트

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

이이 pgAdmin3에서 잘 작동을 달렸다.

Go 코드에서 동일한 작업을 시도했습니다. 스피 오류를 받고 : "PQ : 형 JSON에 대한 잘못된 입력 구문"

내 이동 코드 : I 오류 제거 관리

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 ...은 google을 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]"` 

올바른 대답인지 여부는 잘 모르겠습니다. 그러나 그것은 효과적이다.