Karl Smith wrote in post #978748:
> Hmm, so you are saying I could use a multi-field index (:user_id,
> :credit_card_number). Then, during inserts if a duplicate
> :credit_card_number is attempted a ActiveRecord::StatementInvalid would
> be
> generated, thus giving me an indication to try another
> credit_card_number.
>
> Sounds workable, but is it realistic?

Yes, this is really common in database design. There was a time when 
composite primary keys were common and this is how those were enforced 
to be unique. However, the use of the technique is not limited to 
composite keys.

>
>> http://www.postgresql.org/docs/8.1/static/sql-createsequence.html
>>
> I don't like that, but nice to know.

Some databases use sequences exclusively for generating primary keys. As 
opposed to providing auto-incrmenting column types... Just FYI.

>> My concern about locking the entire table would be that if something
>> went wrong then you might end up in a state where your entire table is
>> stuck in a locked state. I don't know for sure if that's an issue with
>> PostgreSQL, but something to consider.
>>
> Which concerns me as well.
>
>
>>
> I like that idea. That way I'm only locking that sequence table. This
> way I
> could use row level (pessimistic) locking.
>
> So, have you are anyone else tried this?

Yes, I have used this technique for generating serial sequences on a 
number of projects. And you are correct that row level locking is used 
to manage concurrent access.

http://www.postgresql.org/docs/8.1/static/sql-select.html#SQL-FOR-UPDATE-SHARE

-- 
Posted via http://www.ruby-forum.com/.

-- 
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