2016-08-16 3 views
4

Postgres를 문서 저장소로 사용하려고하는데 Postgres 파서가 JSONB 연산자를 좋아하지 않는 문서를 효과적으로 업다운 할 때 문제가 발생합니다.Postgres JSONB와의 INSERT ON CONFLICT

나는 테이블이 있습니다

CREATE TABLE tbl (data jsonb NOT NULL); 
CREATE UNIQUE INDEX ON tbl ((data->>'a')); 

을 내가 데이터를 삽입하려고 : 나는 데이터 - 시도했습니다

ERROR: syntax error at or near "->>" 

:

INSERT INTO tbl (data) VALUES ('{ "a": "b" }'::jsonb) 
    ON CONFLICT (data->>a) 
    DO UPDATE SET data = data || '{ "a": "b" }'::jsonb 

내가이 오류 메시지가 >> a, 데이터 - >> a, 데이터 -> a, 아마도 데이터 -> a. 그 중 모두는

입니다. JSON 내에 식별자 열 (예 : a)을두고 테이블의 열로 만들고 싶습니다.

현재 지원하려는 작업이 지원됩니까? 두 가지 문제가 있습니다

답변

5

당신은이 :

1) 당신과 같이 추가 괄호를 추가해야합니다

ON CONFLICT ((data->>a)) 

2) 당신은 같은 테이블 별칭 마지막 data 참조 서문 필요 그래서 :

DO UPDATE SET data = tbl.data || '{ "a": "b" }'::jsonb 
+0

: 또한 관련 질문을 참조하십시오. 색인을 추가 한 후 "오류 : 열"tbl_data_a_uidx "존재하지 않습니다." –

+0

@RandyLayman - 네 말이 맞아. 내 업데이트 – Nicarus

+1

을 참조하십시오. 그것은 나를 위해 일합니다. 당신의 도움을 주셔서 감사합니다. –