views:

335

answers:

2

I'm currently running a Rails migration where I am adding a datatype specific to Postgres, the tsvector. It holds search information in the form that Postgres expects for its built-in text searching capabilities.

This is the line from my migration:

t.column "search_vectors", :tsvector

Everything seems to be working fine, and the search works with it. However, when I opened up schema.rb, this is what I got:

Could not dump table "users" because of following StandardError
Unknown type 'tsvector' for column 'search_vectors'

This is preventing me from running unit tests on the user table, and also strikes me as really dangerous looking given that the schema.rb is supposed to be the authoritative definition of my database.

I notice there are a number of Rails plugins that seem to use the same approach of storing the tsvector like I would expect, such as tsearchable. Am I really just stuck without testing and without an authoritative definition of my database?

+1  A: 

Have you tried specifying the type as a string instead of a symbol?

t.column "search_vectors", "tsvector"

If that doesn't work then you might need to drop down to database-specific SQL:

def self.up
  execute "--Put your PostgreSQL specific SQL statements here"
end
John Topley
Changing to strings did not fix the problem.However, did you edit your response? I think you previously had a recommendation to change my config to:config.active_record.schema_format = :sqlThis did work.
WIlliam Jones
Not me. That advice was deleted by the person who posted it (Phil Ross) for some reason.
John Topley
+2  A: 

FYI for anyone who happens across this page, I fixed this by adding this (actually uncommenting it) to my Rails config:
config.active_record.schema_format = :sql

WIlliam Jones