1

基本的なpgフルテキスト機能を備えたシンプルなRailsアプリに取り組んでいます。私のローカルPostgreSQL全文検索はうまく機能していましたが、突然2回機能しなくなりました(結果が生成されませんでした)。その間、まったく同じコードのコピーを持つ私のherokuアプリは正常に動作しています。いくつかの移行を行い、ローカルで「rakedb:reset」を実行したことが原因だと思います。「rakedb:drop; rake db:create; rake db:migrate」を実行してローカルデータベースのクリーンアップを開始することにより、「結果なし」の問題を修正する必要がありました。

私は何を見逃した/間違ったことをしましたか?どんな提案でも大歓迎です!!

私はここのチュートリアルに従っています。tsvectorは1つしかありません。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