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)
我正在使用带有来自 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)