Как в нижнем регистре все элементы массива JSONB строк каждой строки в таблице - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть таблица с полем под названием «данные», который имеет тип JSONB. Содержимое «data» представляет собой объект с одним из полей, называемых «related_emails», который представляет собой массив строк.

Мне нужно обновить существующую таблицу так, чтобы содержимое «related_emails» было все ниже -дело. Как этого добиться? Это моя попытка (она вызывает ошибку: ERROR: cannot extract elements from a scalar)

update mytable my
set
    "data" = safe_jsonb_set(
        my."data",
        '{associated_emails}',
        to_jsonb(
            lower(
                (
                    SELECT array_agg(x) FROM jsonb_array_elements_text(
                        coalesce(
                            my."data"->'associated_emails',
                            '{}'::jsonb
                        )
                    ) t(x)
                )::text[]::text
            )::text[]
        )
    )
where
  my.mytype = 'something';

1 Ответ

1 голос
/ 21 апреля 2020

Вы хотели бы использовать JSONB_SET и ОБНОВИТЬ столбец, как показано ниже:

UPDATE jsonb_test 
SET    data = JSONB_SET(data, '{0,associated_emails}', 
                        JSONB(LOWER(data ->> 'associated_emails'::TEXT))); 
...