Re: filter records by substring match of an postgresql array column

From: Arup Rakshit <aruprakshit1987(at)outlook(dot)com>
To: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: filter records by substring match of an postgresql array column
Date: 2017-11-08 12:28:56
Message-ID: 7F8673F7-CFF5-4C3E-B5ED-1C80BE505B5A@outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I enabled the extension `pg_trgm`.

I thought to query like:

SELECT
"videos".*
FROM
"videos"
WHERE
(
array_to_string(tags, ', ') ilike '%web shorts%'
)
AND EXISTS
(
SELECT
FROM
unnest(tags) AS u(val)
WHERE
u.val ILIKE '%web shorts%'
)
;

And to do I wanted to add an index like:

CREATE INDEX trgm_idx_video_tags ON videos USING gist ((array_to_string(tags, ', ')) gist_trgm_ops)

But on running this I get an error as:

ERROR: functions in index expression must be marked IMMUTABLE

How can I fix this?

> On Nov 8, 2017, at 4:02 PM, Arup Rakshit <aruprakshit1987(at)outlook(dot)com> wrote:
>
> Hi,
>
> I do have a videos table, and it has a column called `tags` of type array. I would like to select all videos where any string inside tag column matches a given substring. What method should I use? The *Contains `@>` operator* will do full string comparisons as far as I understood.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message rammohan ganapavarapu 2017-11-08 16:17:01 Re: Can master and slave on different PG versions?
Previous Message Jeff Janes 2017-11-08 11:49:51 Re: filter records by substring match of an postgresql array column