2016-08-16 15 views
4

私はPostgresをドキュメントストアとして使用しようとしていますが、PostgresのパーサーがJSONB演算子を好きではないような文書を効果的にアップセルしようとしているときに問題に遭遇しています。PostgresのJSONBとの矛盾の挿入

私はテーブルを持っている:

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、data - > 'a'、data-> a、おそらくデータ - > 'a'。これらはすべて

私はJSON内に識別子列(この例では)を残して、テーブル上の列にしないでください。

現在サポートしようとしていることはサポートされていますか?

答えて

5

あなたが持っている二つの問題があります。

1)あなたがそうのように、追加のかっこを追加する必要があります。

ON CONFLICT ((data->>a)) 

2)あなたが好き、あなたのテーブルの別名で最後data参照はじめにする必要がありますso:

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

これはうまくいかないようです。インデックスを追加した後、「ERROR:column」というtbl_data_a_uidxが存在しません。 –

+0

@RandyLayman - そうです。私のアップデート – Nicarus

+1

を参照してください。それは私のために働く。ご協力いただきありがとうございます。 –