Select 在 postgresql 中查询带有列表的 jsonb 列

Select query for jsonb column with list in postgresql

我有 table 和 jsonb 列。 我需要向 select 错误列包含 LATEST_PERIOD_TOO_OLD 的所有行编写查询。但是我发现的例子只有在你有钥匙的情况下才有效。但我没有。经典 like 也不能用于 jsonb

Table:

 id |                 errors                 
----+----------------------------------------------------------------
  1 | ["LATEST_PERIOD_TOO_OLD"]
  2 | ["LATEST_PERIOD_TOO_OLD", "DURATION_TOO_SMALL"]
  3 | null

Entity class 中的字段:

    @Type(type = "jsonb")
    @Column(name = "errors", columnDefinition = "jsonb")
    var errors: Set<ValidationError>? = null,

sql 查询是:

SELECT *
  FROM your_table
 WHERE jsonb_path_match(errors, '$[*] ? (exists(@ == "LATEST_PERIOD_TOO_OLD"))')

使用 @> contains 运算符。

select * from the_table where errors @> '["LATEST_PERIOD_TOO_OLD"]';

与问题无关,但你为什么不使用规范化数据设计?