Я создаю поиск внутри приложения Rails, используя функцию pg_search gem
. Однако в одной из таблиц есть поле типа данных Text
, и его содержимое немного больше, чем обычно.
Теперь, когда мне нужно настроить tsvector column
для столбцов text
, я сталкиваюсь с некоторыми ограничениями, связанными с размером текстового поля и размером tsvector.
ERROR: string is too long for tsvector (5068741 bytes, max 1048575 bytes)
Есть ли способ определить условие для пропуска больших полей Text
при создании столбца tsvector в триггере SQL
, чтобы сделать что-то вроде этого:
псевдокод:
execute(<<-TRIGGERSQL)
CREATE OR REPLACE FUNCTION public.essays_before_insert_update_row_tr()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
If (SELECT LEN(body_text) FROM essays) <= 1048575
new.tsv_body_text := to_tsvector('pg_catalog.english', coalesce(new.body_text,''));
RETURN NEW;
End
END;
$function$
TRIGGERSQL
# no candidate create_trigger statement could be found, creating an adapter-specific one
execute("CREATE TRIGGER essays_before_insert_update_row_tr BEFORE INSERT OR UPDATE ON \"essays\" FOR EACH ROW EXECUTE PROCEDURE essays_before_insert_update_row_tr()")
связанный вопрос, который я нашел без ответа: