postgresql, сгенерированные поля из jsonb - PullRequest
1 голос
/ 28 апреля 2020

Я использую сгенерированный столбец с postgresql 12 с данными из поля jsonb (содержащие json с "public":true или "public":false

CREATE TABLE people (
    ...,
    data jsonb,
    public boolean generated always as ((data ->> 'public')::boolean) stored,
    ...
)

иногда json ( из разных приложений) отсутствует ключ publi c* 1007. * как установить по умолчанию значение FALSE для столбца publi c?

Ответы [ 2 ]

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

Оператор ->> возвращает NULL, когда ключ не найден, поэтому вы можете просто COALESCE получить желаемое значение по умолчанию:

COALESCE((data ->> 'public')::boolean, FALSE)
0 голосов
/ 28 апреля 2020

Вы можете использовать выражение case вместе с оператором ?, например:

create table people (
    ...,
    data jsonb,
    public boolean generated always as (
        case 
            when data ? 'public' then (data ->> 'public')::boolean
            else false
        end
    ) stored
);
...