Adding a Postgres ENum type via. migration breaks db/schema.rb table entry

609 views
Skip to first unread message

alexande...@gmail.com

unread,
Nov 11, 2015, 4:59:55 AM11/11/15
to Ruby on Rails: Talk
Hello, So I'm adding a Postgres Enum Type with a migration but I'm having a problem with db/schema.rb output breaking when I do this:

def up
  execute
<<-SQL.squish
     CREATE TYPE three_letters_type AS ENUM
(
       
'A',
       
'B',
       
'C',
       
);
  SQL
  execute
<<-SQL.squish
     ALTER TABLE test
     ADD COLUMN three_letters three_letters_type
;
  SQL
 
end


I end up with the following comments in db/schema.rb -


# Could not dump table "test" because of following StandardError
#   Unknown type 'three_letters_type' for column 'three_letters'

It's quite important for me to be able to use Enums because unique-indexes across several columns are expensive and it's highly preferable not to use t.string (varchar) here. Would be great to hear if there is a work-around for this, thanks.

botp

unread,
Nov 11, 2015, 6:31:28 AM11/11/15
to rubyonra...@googlegroups.com
On Wed, Nov 11, 2015 at 4:33 PM, <alexande...@gmail.com> wrote:
> # Could not dump table "test" because of following StandardError
> # Unknown type 'three_letters_type' for column 'three_letters'

activerecord will complain : ) see
http://edgeguides.rubyonrails.org/active_record_postgresql.html


so to dump schema, try

config.active_record.schema_format = :sql #instead of :ruby default

kind regards
--botp

Rio

unread,
Aug 1, 2017, 1:15:31 PM8/1/17
to Ruby on Rails: Talk
I found another way around this so you could still use the ruby version of schema dumper.  You must create an initializer to add your custom types to the active record psotgress adapter.  I wrote up the answer here:


(This post was the first place I saw talking about it so wanted to make sure anyone else stumbling across it found a good answer)
Reply all
Reply to author
Forward
0 new messages