簡體   English   中英

使用pg_search與公寓gem

[英]using pg_search with apartment gem

我正在嘗試將pg_search gem與由公寓gem啟用的多租戶應用程序結合使用。 Apartment用每個租戶的模式分隔我的數據。 與每個租戶一起搜索時,使用pg_search的默認設置效果很好,但是我在啟用pg_trgm的情況下無法使用它。

我通過在數據庫中添加了一個名為“共享擴展”的獨立模式並在其上啟用pg_trgm擴展來啟用了pg_trgm擴展。 通過配置單元,此架構始終包含在搜索路徑中:

config.persistent_schemas = %w{ shared_extensions }

但是,當我嘗試對模型進行Trigram搜索時,出現錯誤。

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;

任何幫助,將不勝感激! 謝謝

我發現了問題所在。 也許有一天它可以幫助某人。

盡管您可以為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM