2017-11-16 11 views
0

PostgresテーブルのJSONブロブに値がすべて存在するかどうかに基づいて挿入を試行します。Postgres JSONデータに基づいて挿入

| a | b | c | d |  metadata     | 
_____________________________________________________ 
| 1 | 2 | 3 | 4 | {"other-key": 1}     | 
| 2 | 1 | 4 | 4 | {"key": 99}      | 
| 3 | 1 | 4 | 4 | {"key": 99, "other-key": 33}  | 

現在、このようなものを使用しようとしています。

INSERT INTO mytable (a, b, c, d, metadata) 
SELECT :a, :b, :c, :d, :metadata::JSONB 
WHERE 
    (:metadata->>'key'::TEXT IS NULL 
    OR :metadata->>'key'::TEXT NOT IN (SELECT :metadata->>'key'::TEXT 
            FROM mytable)); 

が、エラーを得続ける:演算子は存在しません:不明 - >>ブール ヒント:いいえ、オペレータが指定した名前と引数の型(複数可)と一致しません。明示的な型キャストを追加する必要があるかもしれません。

答えて

0

それは

INSERT INTO mytable (a, b, c, d, metadata) 
SELECT :a, :b, :c, :d, :metadata::JSONB 
WHERE 
    ((:metadata::JSONB->>'key') is NULL or 
    :metadata::JSONB->>'key' NOT IN (
            SELECT metadata->>'key' FROM mytable 
            WHERE 
            metadata->>'key' = :metadata::JSONB->>'key')); 
だけのシンプルな鋳造問題でした
関連する問題