Select PostgreSQL 中 jsonb 列的值

Select value of jsonb column in PostgreSQL

我有一个 table 'Documents',它有一个 'Tags' 列,数据类型为 'jsonb'。 标签列中的示例数据

 [{"Tag": "Social Media"}, {"Tag": "Adobe Creative"}]
 [{"Tag": "Interactive"}]
 [{"Tag": "Web 2.0"}, {"Tag": "Adobe Creative"},{"Tag": "Suite"}]

我需要获取 "Tag" 的不同值,比如

 Social Media 
 Adobe Creative
 Interactive
 Web 2.0
 Suite

我是 PostgreSQL 的新手。

最短的版本是:

SELECT DISTINCT value->'Tag' AS tag
FROM Documents, jsonb_array_elements(Documents.Tags);

jsonb_array_elements() function 将 JSONB 数组取消嵌套到一组行中,其中包含一个名为 "value" 的列。它在 Documents table.

上使用隐式 "lateral join"

这为您提供了不同的标签作为 jsonb 值。如果您希望它们作为 text 值,请使用 ->> 运算符而不是 ->

您还可以使用以下代码段。

SELECT 
  id, 
  data::json->'name' as name
FROM books;