Philip Hallstrom <[email protected]> writes:

>> Philip Hallstrom <[email protected]> writes:
>>
>>> On Feb 24, 2010, at 11:17 AM, Jarl Friis wrote:
>>>
>>>> Hi.
>>>>
>>>> This must be the most obvious thing to do, but I just can't seem to
>>>> find examples of how to do this. I would like to create a table
>>>> with a
>>>> table unique constraint on database level.
>>>>
>>>> In deed some migration code that would generate the following SQL
>>>>
>>>> CREATE TABLE properties (
>>>> namespace CHAR(50),
>>>> name      CHAR(50),
>>>> value     VARCHAR(100),
>>>> CONSTRAINT my_constraint UNIQUE (namespace, name)
>>>> );
>>>>
>>>
>>> create_table :properties.....
>>>   .....
>>> end
>>>
>>> add_index :properties, [:namespace, :name], :unique => true
>>
>> After trying this and opening my interactive SQL prompt (psql), I can
>> see that this only creates an index on the table not a table
>> constraint. I can still put duplicate rows in the table.
>
> Hrm.  I can't...  Rails 2.3.5, Postgresql 8.4.1 (on mac, but doubt
> that matters)

I am so sorry. I did't do exactly as you said, explanation:
I used

create_table :properties do |t|
  .....
  t.index [:namespace, :name], :unique => true
end

That does NOT create an index!!! and therefore neither a constraint!!!

I gues that is a bug in the PostgreSQL adapter.

But when I do as you describe using add_index syntax instead it will
create an index (AND constraint!)

But the fact that 't.index [:namespace, :name], :unique => true' does
not generate an index is a bug, right?

Thanks for all help. I appreciate the time you've spent on this.

Jarl

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to