[我正在使用带有PostgreSQL 12的生成的列,其中包含来自jsonb字段的数据(包含具有"public":true
或"public":false
的json
CREATE TABLE people (
...,
data jsonb,
public boolean generated always as ((data ->> 'public')::boolean) stored,
...
)
有时(来自不同应用程序的json)缺少public键。我如何将默认值设置为FALSE到public column?
您可以将case
表达式与?
运算符一起使用,例如:
create table people (
...,
data jsonb,
public boolean generated always as (
case
when data ? 'public' then (data ->> 'public')::boolean
else false
end
) stored
);
找不到密钥时,->>
operator返回->>
,因此您可以将NULL
设置为所需的默认值:
COALESCE