Ошибка мультипоиска pg_search после инициализации tsearch, триграмма

У меня pg_search работал над моим приложением Rails 3.2.3, используя мультипоиск. Затем я реализовал инициализатор, предоставленный nertzy (автор pg_search) в этот пост.. Теперь, когда я запускаю поиск, я получаю следующую ошибку:

PG::Error: ERROR:  operator does not exist: text % unknown
LINE 1: ... ((coalesce("pg_search_documents"."content", '')) % 'searchterm...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

Мое представление отображается с помощью этого кода:

<%= @pg_search_documents.each do |pg_search_document| %>
  <%= pg_search_document.searchable.title %>
<% end %>

Остальную часть моей настройки можно найти здесь. Любая помощь очень ценится.


person Gruntled    schedule 15.05.2012    source источник
comment
Вы нашли ответ на это? Я сталкиваюсь с той же проблемой.   -  person John Goodman    schedule 31.05.2012
comment
Эй, Джон. Я пытаюсь вспомнить, но думаю, что исправил это, удалив функциональность триграммы (что бы это ни было). Итак, удаление этой строки: :trigram => {} исправило это для меня.   -  person Gruntled    schedule 31.05.2012
comment
Да, копнув глубже, я обнаружил, что вам нужно установить пакет триграммы, чтобы он работал. На странице pg_search есть немного документации.   -  person John Goodman    schedule 31.05.2012


Ответы (1)


Я тоже сталкивался с этой проблемой раньше. Просто чтобы уточнить для всех, у кого могут возникнуть проблемы... вот как установить расширение:

  1. Создайте новую миграцию, запустив

    bundle exec rails g migration add_trigram_extension
    
  2. В свою миграцию вставьте следующий код:

    def up
        execute "create extension pg_trgm"
    end
    
    def down
        execute "drop extension pg_trgm"
    end
    
  3. Запустите миграцию с помощью bundle exec rake db:migrate

Это сработало для меня локально. Для некоторых расширений или конфигураций, которые вы можете использовать с pg_search, требуются более новые версии Postgres. Чтобы использовать определенные расширения на героку, вам может понадобиться база данных разработчиков.

ОБНОВЛЕНИЕ: Насколько я понимаю, heroku выпускает последовательные обновления, и теперь все используют более новую версию pg по умолчанию. Вышеупомянутое должно работать на героку без необходимости обновления вашей базы данных.

person stephenalexbrowne    schedule 27.07.2012