postgresql,从 jsonb 生成字段

postgresql, generated fields from jsonb

我正在使用带有来自 jsonb 字段的数据的 postgresql 12 生成的列(包含 json 和 "public":true"public":false

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

有时 json(来自不同的应用程序)缺少 public 键。如何将 public 列的默认值设置为 FALSE?

您可以将 case 表达式与 ? 运算符一起使用,例如:

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

->> operator returns NULL when the key is not found, so you can just COALESCE即为想要的默认值:

COALESCE((data ->> 'public')::boolean, FALSE)