2017-11-15 24 views
0

次のようにPostgreSQL(v10.0)を作成しました。PostgreSQL:要素がユニークである場合にのみjsonb配列に要素を追加します。

CREATE TABLE test (id INT, animals jsonb) 

INSERT INTO test VALUES 
    (1, '["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"]'), 
    (2, '["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"]') 

は、その後、次のように私は新しい動物を追加します。

UPDATE test 
SET animals = animals || '["[hamsters, 7]", "[chicken, 2]"]'::jsonb 
WHERE id = 1; 

しかし、私はいくつかの要素が、配列ではまだありません要素のみを追加します。この場合

、それが唯一である[鶏、2]

答えて

1

を、おそらく最も簡単なのは次のようになります。

t=# with c as (select distinct e,min(o) over (partition by e) o from test, jsonb_array_elements(animals || '["[hamsters, 7]", "[chicken, 2]"]'::jsonb) with ordinality t(e,o) where id =1) 
, r as (select jsonb_agg(e order by o) z from c) 
t-# update test set animals = z from r where id = 1; 
UPDATE 1 
t=# select * from test; 
id |        animals 
----+------------------------------------------------------------------ 
    2 | ["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"] 
    1 | ["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]", "[chicken, 2]"] 
(2 rows) 
関連する問題