首页 > 解决方案 > 如何按键提取字段中的jsonb列

问题描述

我正在使用 postgresql 和 postgis 插件。

我已经用这个方案存储了数据:table_id is primary key, properties is a jsonb and geom as geometry(GeometryZ,4326);

如果我提出这个请求:select table_id, properties, geom from nametable返回所有信息,table_id 为整数,属性为 jsonb,geom 为几何(GeometryZ,4326)。

我想要一个查询,其中属性返回 table_id,列的列表,其中列的名称是值的键,他的值和 geom。例如,如果属性具有名称和密度,则返回如下响应:table_id | name | density | geom |,但我不知道属性的名称,所以我认为这应该是该查询中获取键名称的查询。

我最接近得到它,它与这个查询:select jsonb_object_keys(properties) as key from nametable;

谢谢

编辑:

首先,我在我的 postgressql 数据库中存储了一个 jsonb 字段,所以我想将该 jsonb 提取到列中。但是已将包含不同属性的不同表存储到 jsonb 列中。

因此,想法是获取一个查询,其中选择 table_id、属性(在多个列中提取)和 geom。

1 - 有了这个我有键的名称:select jsonb_object_keys(properties) as key from nametable group by key;

2 - 使用键在列中获取每个键的所有值。

3 - 返回一个查询,当我调用它时,返回我 table_id,从 jsonb 中提取的属性列,从 nametable 中提取的 geom;

我的问题是我不知道如何使用子查询生成该查询。

在此处输入图像描述

标签: sqlpostgresqlpostgis

解决方案


您是否尝试过使用CTE?

WITH j AS (
  SELECT 
    table_id, 
    properties->>'name' AS name,
    properties->>'density' AS density,
    geom 
  FROM t)
SELECT * FROM j WHERE j.name = 'Alabama'; 

推荐阅读