Используя pg_search с жемчужиной квартиры
Я пытаюсь использовать драгоценный камень pg_search в сочетании с многопользовательским приложением, включенным жемчужиной квартиры. Квартира разделяет мои данные со схемой на каждого арендатора. Поиск в каждом арендаторе хорошо работает с настройками по умолчанию pg_search, но у меня возникают проблемы при использовании его с включенным pg_trgm.
Я включил расширение 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;
Любая помощь будет оценена! Спасибо
1 ответ
Я узнал, что случилось. Возможно, когда-нибудь это может кому-нибудь помочь.
Хотя у вас может быть много схем для базы данных 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