Negezor
@Negezor
Senior Shaurma Developer

Как реализовать поиск по массиву Postgres с ILIKE?

У меня есть вот такая таблица в базе данных
CREATE TABLE public."Releases" (
    id uuid NOT NULL,
    name character varying(150) COLLATE pg_catalog."default" NOT NULL,
    english character varying(150) COLLATE pg_catalog."default",
    synonyms character varying(150)[] COLLATE pg_catalog."default" NOT NULL DEFAULT (ARRAY[]::character varying[])::character varying(150)[]
) WITH (
    OIDS = FALSE
)

TABLESPACE pg_default;

ALTER TABLE public."Releases"
    OWNER to postgres;

Реализовать поиск с использованием ILIKE для полей name, english очень просто. Только вот теперь понадобился поиск по массиву synonyms, и вот тут соответственно возникла ситуация при таком запросе:
SELECT * FROM "public"."Releases" WHERE synonyms ILIKE '%test%'

Возникает ошибка:
ОШИБКА:  оператор не существует: character varying[] ~~* unknown
СТРОКА 1: SELECT * FROM "public"."Releases" WHERE synonyms ILIKE '%tes...
                                                           ^
ПОДСКАЗКА:  Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения типов.

Так вот как именно отредактировать запрос, чтобы добавить это поведение?
  • Вопрос задан
  • 973 просмотра
Решения вопроса 1
select_artur
@select_artur
C разработчик
Можете попробовать функцию array_to_string():
SELECT * FROM "public"."Releases" WHERE array_to_string(synonyms, ', ') ILIKE '%test%';
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы