How to configure a PostgreSQL test database before testing?

My website uses PostgreSQL and its full-text search. For that to work, I
need to execute some configuration queries in order to configure some
full-text search extensions.

This is what I have written in a migration file to configure the
development database:

class ConfigurePostgresql < ActiveRecord::Migration
def up
execute(“CREATE EXTENSION unaccent;”)
execute(“ALTER TEXT SEARCH DICTIONARY unaccent (RULES=‘unaccent’);”)
execute(“CREATE TEXT SEARCH CONFIGURATION es ( COPY = spanish );”)
execute(“ALTER TEXT SEARCH CONFIGURATION es
ALTER MAPPING FOR hword, hword_part, word
WITH unaccent, spanish_stem;”)
end
end

This works perfectly in develpment.

Now I want to run some search tests, but when I execute my functional
tests, I get an error saying that the extension is not configured:

ActiveRecord::StatementInvalid: PG::Error: ERROR: function
unaccent(text) does not exist

Why is not it creating the extension? I have executed rake
db:test:prepare

I have noticed that those execute lines are not included in my
schema.rb.
When I copy them inside the schema.rb, then all tests run correctly. Is
there some way to make this work well without having to copy the
executes
everytime I make a migration?

On Wed, Oct 24, 2012 at 6:49 PM, David M [email protected] wrote:

execute("ALTER TEXT SEARCH DICTIONARY unaccent (RULES='unaccent');")

tests, I get an error saying that the extension is not configured:

ActiveRecord::StatementInvalid: PG::Error: ERROR: function unaccent(text) does
not exist

Why is not it creating the extension? I have executed rake db:test:prepare

i think rake db:test:prepare uses schema.rb to create the test database.
since you added raw sql, this is not added to schema.rb. you should
use
the sql format of schema.rb. more info here

–

Thanks jim, that solved the problem.

El mircoles, 24 de octubre de 2012 13:11:57 UTC+2, jim escribi: