PostgreSQL JSONB数组 - 查找是否存在密钥

时间:2017-09-29 13:43:35

标签: postgresql postgresql-json

Product在PostgreSQL 9.6中有一个jsonb列attributes,并包含attributes列的以下条目。

记录1:

[
  {    "KEY1": "VALUE1",    "KEY2": "VALUE2"  },
  {    "KEY1": "VALUE3",    "KEY3": "VALUE4"  },
]

记录2:

[
  {    "KEY1": "VALUE1",    "KEY2": "VALUE2"  },
  {    "KEY3": "VALUE3",    "KEY4": "VALUE4"  },
]

我们如何过滤包含KEY4密钥的记录? 给出here的jsonb运算符不提供jsonb数组的详细信息。

2 个答案:

答案 0 :(得分:1)

您必须替换正确的表名和列名,但这应该可以解决问题:

FROM your_table jsonb_array_elements(your_table.the_array_key->'your_column') AS something WHERE something->>'KEY4'::text != 'null'

在不知道表名和列名的情况下很难确定。最重要的是,您需要使用json_array_elements

答案 1 :(得分:1)

对于这样的表:

create table test_table
(
  id serial not null,
  data jsonb
);

使用您的数据

SELECT id, arr_elem
FROM test_table AS tt, jsonb_array_elements(
    (
      SELECT data
      FROM test_table
      WHERE id = tt.id
    )
) AS arr_elem
WHERE arr_elem#>'{KEY4}' IS NOT NULL

您基本上解压缩数组并将其与源表连接回来。

结果:

  

id,arr_elem

     

2,{“KEY3”:“VALUE3”,“KEY4”:“VALUE4”}

SQLFiddle

相关问题