2016-06-21 3 views
0

Я пытаюсь использовать жемчужину pg_search в сочетании с многократным приложением, включенным в апартамент. Квартира разделяет мои данные схемой на одного арендатора. Поиск с каждым арендатором хорошо работает с настройками pg_search по умолчанию, но у меня возникают проблемы с его использованием с включенным pg_trgm.using pg_search с драгоценным камнем квартиры

Я включил расширение pg_trgm в своей базе данных, добавив отдельную схему под названием «общие расширения» и включив расширение pg_trgm. Эта схема всегда включаются в пути поиска по настраиваемой квартире:

config.persistent_schemas = %w{ shared_extensions } 

Но когда я пытаюсь сделать поиск триграммы для модели я получаю сообщение об ошибке.

pg_search_scope :search_by_name, against: :name, using: :trigram 

Meeting.search_by_name('blabla').first 

PG::UndefinedFunction: ERROR: operator does not exist: text % unknown 

Это заставляет меня думать pg_trgm не был активизирован правильно, однако я могу выполнить следующий запрос на моей базе данных просто отлично:

SELECT name, similarity(name, 'blabla') AS sml 
FROM aa.meetings 
WHERE name % 'blabla' 
ORDER BY sml DESC, name; 

Любая помощь будет оценен по достоинству! Thanks

ответ

0

Я узнал, что случилось. Возможно, когда-нибудь это поможет кому-нибудь.

Хотя у вас может быть много схем для базы данных Postgres, вы можете активировать расширения только на одной из схем. У меня уже был включен pg_trgm для схемы, которая не была включена в каждый путь поиска, поэтому установка расширения для схемы shared_extensions не удалась.

Я изменил мою реки задачу следующим образом:

namespace :db do 

desc 'Create shared_extensions Schema' 
    task :extensions => :environment do 
    ActiveRecord::Base.connection.execute 'DROP EXTENSION IF EXISTS "pg_trgm"' 
    ActiveRecord::Base.connection.execute 'CREATE SCHEMA IF NOT EXISTS shared_extensions;' 
    ActiveRecord::Base.connection.execute 'CREATE EXTENSION "pg_trgm" SCHEMA shared_extensions;' 
    end 
end 

Rake::Task["db:create"].enhance do 
    Rake::Task["db:extensions"].invoke 
end 

Rake::Task["db:test:purge"].enhance do 
    Rake::Task["db:extensions"].invoke 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^