我正在开发一个具有基本 pg 全文功能的简单 Rails 应用程序。我的本地 PostgreSQL 全文搜索运行良好,但它突然停止工作(没有生成结果)两次。同时,具有完全相同代码副本的 heroku 应用程序运行良好。我怀疑这是因为我在本地进行了一些迁移和“rake db:reset”。我必须通过运行“rake db:drop;rake db:create;rake db:migrate”来修复“无结果”问题以启动本地数据库清理。
我错过了什么/做错了什么?任何建议都非常感谢!
我正在关注这里的教程。我只有一个 tsvector。这是添加 tsvector 时我的迁移的样子。
class AddTSearchToQuestion < ActiveRecord::Migration
def self.up
execute(<<-'eosql'.strip)
ALTER TABLE questions ADD COLUMN tsv tsvector;
CREATE FUNCTION questions_generate_tsvector() RETURNS trigger AS $$
begin
new.tsv :=
setweight(to_tsvector('pg_catalog.english', coalesce(new.title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(new.details,'')), 'B');
return new;
end
$$ LANGUAGE plpgsql;
CREATE TRIGGER tsvector_questions_upsert_trigger BEFORE INSERT OR UPDATE
ON questions
FOR EACH ROW EXECUTE PROCEDURE questions_generate_tsvector();
UPDATE questions SET tsv =
setweight(to_tsvector('pg_catalog.english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(details,'')), 'B');
CREATE INDEX questions_tsv_idx ON questions USING gin(tsv);
eosql
end
def self.down
execute(<<-'eosql'.strip)
DROP INDEX IF EXISTS questions_tsv_idx;
DROP TRIGGER IF EXISTS tsvector_questions_upsert_trigger ON questions;
DROP FUNCTION IF EXISTS questions_generate_tsvector();
ALTER TABLE questions DROP COLUMN tsv;
eosql
end
end