【问题标题】:postgresql, generated fields from jsonbpostgresql,从 jsonb 生成的字段
【发布时间】:2020-04-28 16:00:20
【问题描述】:

我正在使用 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?

【问题讨论】:

    标签: sql json postgresql create-table jsonb


    【解决方案1】:

    ->> operator 在找不到密钥时返回NULL,因此您可以将COALESCE 设置为所需的默认值:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        • 2017-07-15
        • 2015-07-16
        • 2017-03-19
        相关资源
        最近更新 更多