PostgreSQL JSONB 数组 - 查找键是否存在

PostgreSQL JSONB Array - Find if a key exists

table 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键的记录? 给定的 jsonb 运算符 here 不提供 jsonb 数组的详细信息。

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

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

如果不知道 table 和列名,很难确定。底线是您需要使用 json_array_elements.

对于 table 这样的:

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

您基本上是解压数组并将其与源连接起来 table。

结果:

id , arr_elem

2 , {"KEY3": "VALUE3", "KEY4": "VALUE4"}

SQLFiddle