2016-06-21 2 views
0

아파트 보석으로 가능하게 된 다중 임대 응용 프로그램과 함께 pg_search 보석을 사용하려고합니다. 아파트는 세입자별로 스키마로 내 데이터를 분리합니다. 각 임차인을 찾고 withing은 pg_search 기본 설정으로 잘 작동하지만 pg_trgm을 활성화 한 상태에서 사용하는 데 문제가 있습니다.아파트 보석으로 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; 

어떤 도움을 주시면 감사하겠습니다! 감사합니다.

답변

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 
:

나는이 내 레이크 작업을 변경
관련 문제