如何通过键提取字段中的jsonb列

Jav*_*ier 5 sql postgresql postgis

我正在使用 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,列的列表,其中列的名称是值的键及其值和几何。例如,如果属性具有名称和密度,则返回如下响应: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;

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

在此输入图像描述

Jim*_*nes 4

您尝试过使用 吗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'; 
Run Code Online (Sandbox Code Playgroud)