Postgres - 如何将 select jsonb 键值对作为列?

Postgres - how select jsonb key value pairs as colums?

test table 中有这样的记录(metrics 列是 jsonb 类型):

id     name      metrics
1      machine1  {"metric1": 50, "metric2": 100}
2      machine2  {"metric1": 31, "metric2": 46}

我想 select 将指标作为附加列,例如(伪代码):

Select *, json_each(test.metrics) from test;

得到如下结果:

id  name       metric1   metric2 
1   machine1   50        100
2   machine2   31        46

这可能吗?

使用->>运算符:

select id, name, 
       metrics ->> 'metric1' as metric1,
       metrics ->> 'metric2' as metric2
from test;

您可以简单地使用 ->>

demo:db<>fiddle

SELECT
    id,
    name,
    metrics ->> 'metric1' as metric1,
    metrics ->> 'metric2' as metric2
FROM t

请注意,现在 metric 列的类型为 text。如果你想让它们成为 integer 类型,你需要另外转换它们:

(metrics ->> 'metric1')::int