I have table with jsonb
column.
I need to write a query to select all rows for which the errors column contains LATEST_PERIOD_TOO_OLD
. But the examples I found only work if you have a key. But I do not have it. Classic like
cannot be used for jsonb
either
Table:
id | errors
---- ----------------------------------------------------------------
1 | ["LATEST_PERIOD_TOO_OLD"]
2 | ["LATEST_PERIOD_TOO_OLD", "DURATION_TOO_SMALL"]
3 | null
Field in Entity class
:
@Type(type = "jsonb")
@Column(name = "errors", columnDefinition = "jsonb")
var errors: Set<ValidationError>? = null,
CodePudding user response:
The sql query is :
SELECT *
FROM your_table
WHERE jsonb_path_match(errors, '$[*] ? (exists(@ == "LATEST_PERIOD_TOO_OLD"))')
CodePudding user response:
Use @>
contains operator.
select * from the_table where errors @> '["LATEST_PERIOD_TOO_OLD"]';
Unrelated to the question but why don't you use a normalized data design?