Как выбрать ключи JSONB без учета регистра в PostgreSQL (9.4+)

Setup (PostgreSQL 9.4+)

Предположим у меня есть таблица product:

create table product
(
    attributes jsonb
);

данные:

insert into product (attributes) 
values ('{"Color": "Red"}'), 
       ('{"color": "White"}'),
       ('{"COLOR": "Blue"}');

вопрос

Как выбрать все записи'color атрибут в PostgreSQL 9.4+? Поскольку ключи отличаются по корпусу, я не могу использовать этот синтаксис:

select 
    attributes->>'color' as color
from product;

мой ожидаемый результат будет:

Red
White
Blue

Возможное Решение

Я также попытался использовать этот синтаксис (работает, но чувствует "Сокс"):

select 
    coalesce(
        attributes->>'color', 
        attributes->>'Color', 
        attributes->>'COLOR') as color 
from product;

возможно ли это? Я вижу, что это может противоречить, если вы color и Color ключи на том же объекте, поэтому я не удивлюсь, если это не вещь.

ссылки:

1 ответов


вы должны извлечь пары (ключ, значение), чтобы использовать функцию lower()

select value as color
from product, jsonb_each(attributes)
where lower(key) = 'color';