使用jsonb_array_elements()
、例えば:
with data(js) as (
select
'[
{ "type": "foo", "desc": "example" },
{ "type": "foo", "desc": "second example" },
{ "type": "bar", "desc": "third example" }
]'::jsonb
)
select elem->>'type' as "type", count(elem->'type')
from data, jsonb_array_elements(js) elem
group by 1;
type | count
------+-------
foo | 2
bar | 1
(2 rows)
関数は次のようになります。
create or replace function check_duplicates(source jsonb, key text)
returns boolean language sql as $$
select max(count) > 1
from (
select count(elem->key)
from jsonb_array_elements(source) elem
group by elem->key
) s
$$;
使用法:
with data(js) as (
select
'[
{ "type": "foo", "desc": "example" },
{ "type": "foo", "desc": "second example" },
{ "type": "bar", "desc": "third example" }
]'::jsonb
)
select check_duplicates(js, 'type')
from data;
check_duplicates
------------------
t
(1 row)
私は、各オブジェクトが異なるという例を明確にしました。 –