Let's say we need to check if a jsonb column contains a particular value matching by a substring in any of the value (non-nested, only first level).
How does one effectively optimize a query to search entire JSONB
column for each value?
Is there some good alternative to doing ILIKE %val%
on jsonb datatype casted to text?
jsonb_each_text(jsonb_column) ILIKE '%val%'
As an example consider this data:
SELECT '{"col1": "somevalue", "col2": 5.5, "col3": 2016-01-01, "col4": "othervalue", "col5": "yet_another_value"}'::JSONB
How would you go about optimizing a query like that when in need to search for pattern %val%
in records containing different keys configuration in a column? Is there a better alternative to extracting each key-value pair to text and performing an ILIKE/POSIX search?
Mainly, I'm looking for a different alternative to unpacking a whole jsonb field into separate key rows with their values as text.
CREATE TABLE
statements for the tables in question adding the desired output. Use formatted text please, no screen shots'%'
creates an un-anchored search pattern. There is no way around indexing this without a trigram index. Not sure what you want though from this.