0

citext大文字と小文字を区別しない検索を許可するグローバル機能がないという Postgres の欠点のため、私は拡張機能を使用しています。

ただし、Rails 3.2 アプリケーションを実行すると、次のようになります。

rake db:test:prepare

私のオブジェクトはtext、の代わりにデータ型で作成されますcitext。上記のrakeコマンドでデータベースを作成し、アプリケーションが必要とする拡張機能を追加して、すでに組み込まれているはずの検索を実行するにはどうすればよいですか?

4

1 に答える 1

1

citext 拡張子をテスト データベースに追加する必要があります。残念ながら、db:test:prepare の標準実装では、データベースが削除されて再作成されるため、拡張機能はなくなりました。

私は同じ状況に陥り、db:test:purge (準備の前に呼び出される) を自分の実装でオーバーライドする必要があったため、データベースを削除する代わりに、オブジェクトを削除するだけでした (「DROP OWNED に基づく解決策」 BY ユーザー名')。

レーキ タスク コードで更新: 私のレーキ タスクは次のようになります。lib/tasks/overrides/database.rake; に置きました。しかし、それはあなた次第です。

 namespace :db do  
   namespace :test do
     task :purge => []
     Rake::Task["purge"].clear

     # desc overrides default task to drop all objects in database instead of the db itself (only postgresql)
     task :purge => [:environment, :load_config] do
       abcs = ActiveRecord::Base.configurations
       case abcs['test']['adapter']
         when /postgresql/
           # original implementation commented out
           #ActiveRecord::Base.clear_active_connections!
           #drop_database(abcs['test'])
           #create_database(abcs['test'])
           drop_database_objects(abcs['test'])
       end
     end
   end
 end

 def drop_database_objects(config)
   case config['adapter']
   when /postgresql/
     ActiveRecord::Base.establish_connection(config)
     sql = "DROP OWNED BY #{config['username']}"
     ActiveRecord::Base.connection.execute sql 
   end 
 end

変更されていない部分は省略していますが、オリジナルはdatabase.rakeで確認できます。注: Postgresql 9.2.2 には DROP OWNED BY に問題があることがわかりました。9.2.1 と 9.2.3 を使用しても問題ありません。それはちょうどその1つのバージョンです。

于 2013-05-14T18:22:21.743 に答える