Postgresql - 来自 jsonb 数组的不同值

Yan*_*ans 4 postgresql jsonb

我有以下 jsonb 数组列(标签)

|name | tags (jsonb)   |
--------------------------------
|john | [ "foo", "bar" ]
|smith| [ "bar", "bat" ]
|adam | [ "foo", "dot" ]
Run Code Online (Sandbox Code Playgroud)

如何获得如下不同的标签 ["foo", "bar", "bat", "dot"] ?

e4c*_*4c5 8

这将解决您的特定问题。

SELECT DISTINCT tag FROM
  (SELECT name, JSONB_ARRAY_ELEMENTS(tags) as b FROM my_table) AS foo;
Run Code Online (Sandbox Code Playgroud)

但是你有一个更大的问题。像这样存储标签是一个经常重复的错误。您应该规范化您的表格。请参阅ArrayField 中的 Django JSONField

  • 仅供参考,这个答案中的规范化建议有点过时了 - 现在 Postgres 支持 JSONB 列上的 GIN 索引(使用疯狂快速的“?”运算符来测试数组/键),将标签存储在 JSONB 列中而不是连接表可以帮助您避免查询期间的大量扇出,并且是一个完全合理的解决方案。 (4认同)