2016-08-16 138 views
4

我想使用Postgres作爲文檔存儲和運行時遇到問題,當我試圖有效地插入Postgres分析器似乎不喜歡JSONB運算符的文檔。Postgres插入衝突與JSONB

我有一個表:

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

,我嘗試使用插入數據:

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

我收到此錯誤信息:

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

我試過數據 - >> a,data - >>'a',data-> a,也許數據 - >'a'。所有這些都是

我想留在JSON中的標識符列(一個例子中),而不是它的表上的列。

正在嘗試做什麼目前支持?

回答

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

是的。這對我行得通。謝謝你的幫助。 –