Using Rails, how can I set my primary key to not be an integer-typed column?

Posted by Rudd Zwolinski on Stack Overflow See other posts from Stack Overflow or by Rudd Zwolinski
Published on 2009-07-29T14:15:19Z Indexed on 2010/05/13 7:44 UTC
Read the original article Hit count: 175

I'm using Rails migrations to manage a database schema, and I'm creating a simple table where I'd like to use a non-integer value as the primary key (in particular, a string). To abstract away from my problem, let's say there's a table employees where employees are identified by an alphanumeric string, e.g. "134SNW".

I've tried creating the table in a migration like this:

create_table :employees, {:primary_key => :emp_id} do |t|
    t.string :emp_id
    t.string :first_name
    t.string :last_name
end

What this gives me is what seems like it completely ignored the line t.string :emp_id and went ahead and made it an integer column. Is there some other way to have rails generate the PRIMARY_KEY constraint (I'm using PostgreSQL) for me, without having to write the SQL in an execute call?

NOTE: I know it's not best to use string columns as primary keys, so please no answers just saying to add an integer primary key. I may add one anyway, but this question is still valid.

© Stack Overflow or respective owner

Related posts about ruby-on-rails

Related posts about migration