1

我正在开发一个具有基本 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
4

0 回答 0