# AR - Migrations - how to use a varchar as primary key instea

**URL:** <https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149>\
**Category:** Rails\
**Created:** [March 12, 2006, 11:02pm UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149 "2006-03-12T23:02:28Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Thibaut\_BarrSSSSre](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6de8d8/32.png) [@Thibaut\_BarrSSSSre](https://www.ruby-forum.com/u/Thibaut_BarrSSSSre)\
**Post date:** [March 12, 2006, 11:02pm UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149/1 "2006-03-12T23:02:28Z")

</div>

Hi

I’d like to have a varchar primary key named id instead of the default  
int  
id. Does anyone knows how to specify this from migrations ?

Should I also specify something in the model class ?

thanks!

Thibaut

---

<div class="post-metadata">

**Author:** ![Thibaut\_BarrSSSSre](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6de8d8/32.png) [@Thibaut\_BarrSSSSre](https://www.ruby-forum.com/u/Thibaut_BarrSSSSre)\
**Post date:** [March 13, 2006, 8:39am UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149/2 "2006-03-13T08:39:58Z")

</div>

Ya probably just…do it. You probably also want some kind of  
iterator/sequence/generator/trigger in place to supply new values  
automatically on insert.

What you should probably also do is create a table that stores the  
last value used, so as to avoid the “select max(id) from mytable…”  
brute force logic as well as any transaction issues, things that  
sequences/generators do for you already in a transaction-safe manner.

---

<div class="post-metadata">

**Author:** ![Thibaut\_BarrSSSSre](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6de8d8/32.png) [@Thibaut\_BarrSSSSre](https://www.ruby-forum.com/u/Thibaut_BarrSSSSre)\
**Post date:** [March 13, 2006, 12:07pm UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149/3 "2006-03-13T12:07:23Z")

</div>

Hi!

well when I add a column under migration, the type can be either  
:string,  
:integer, or :primary\_key. I can’t seem to find how to have it defined  
as  
both a :string and a :primary\_key. Or should I add custom sql ?

---

<div class="post-metadata">

**Author:** ![Thibaut\_BarrSSSSre](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6de8d8/32.png) [@Thibaut\_BarrSSSSre](https://www.ruby-forum.com/u/Thibaut_BarrSSSSre)\
**Post date:** [March 13, 2006, 1:35pm UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149/4 "2006-03-13T13:35:55Z")

</div>

Thibaut BarrÃ¨re wrote:

> Hi
> 
> I’d like to have a varchar primary key named id instead of the default  
> int  
> id. Does anyone knows how to specify this from migrations ?

The Agile book suggest setting up a two primary ids - the first a new  
one : int auto incremented and a second one your legacy pk

\_tony

---

<div class="post-metadata">

**Author:** ![Thibaut\_BarrSSSSre](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6de8d8/32.png) [@Thibaut\_BarrSSSSre](https://www.ruby-forum.com/u/Thibaut_BarrSSSSre)\
**Post date:** [March 14, 2006, 1:18am UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149/5 "2006-03-14T01:18:07Z")

</div>

Thibaut Barrère wrote:

> Hi  
> can you just call the primary\_key() method in your model class (your  
> subclass of ActiveRecord::Base)?

The RDocs:

primary\_key()  
Defines the primary key field ? can be overridden in subclasses.  
Overwriting will negate any effect of the primary\_key\_prefix\_type  
setting, though.

---

<div class="post-metadata">

**Author:** ![Thibaut\_BarrSSSSre](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6de8d8/32.png) [@Thibaut\_BarrSSSSre](https://www.ruby-forum.com/u/Thibaut_BarrSSSSre)\
**Post date:** [March 14, 2006, 1:30am UTC](https://www.ruby-forum.com/t/ar-migrations-how-to-use-a-varchar-as-primary-key-instea/80149/6 "2006-03-14T01:30:52Z")

</div>

Doh, I am sorry, I should have read that you mentioned Migrations.  
Sorry, nothing to see from me.
