How to lock and unlock table in ruby on rails?

946 views
Skip to first unread message

Venkat Eee

unread,
May 6, 2009, 4:03:36 AM5/6/09
to rubyonra...@googlegroups.com
Hello all,

I written the below code in common controller. I will pass the
model_name and it has to lock and unlock the table.
Please help me to correct this code...

def lock_table(model_name)
locked_table = model_name.find(:all, :lock => true)
return locked_table;
end

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

Fernando Perez

unread,
May 6, 2009, 5:41:33 AM5/6/09
to rubyonra...@googlegroups.com
> I written the below code in common controller. I will pass the
> model_name and it has to lock and unlock the table.

That's not how it works. Behind the scenes, it will generate an SQL
statement: SELECT FOR UPDATE, if wrapped in a transaction, then it will
create a lock and then release it when transaction ends.

Venkat Eee

unread,
May 6, 2009, 6:54:31 AM5/6/09
to rubyonra...@googlegroups.com
Fernando Perez wrote:
>> I written the below code in common controller. I will pass the
>> model_name and it has to lock and unlock the table.
>
> That's not how it works. Behind the scenes, it will generate an SQL
> statement: SELECT FOR UPDATE, if wrapped in a transaction, then it will
> create a lock and then release it when transaction ends.


I'm new to ruby. Can u give me some example.

Brendon

unread,
May 6, 2009, 11:25:30 AM5/6/09
to Ruby on Rails: Talk
If you are using MySQL, you need to make sure that you are using a DB
engine that supports transactions if you plan to use them. You will
probably have to use SQL to do the table locking, so if you are using
mysql look in the MySQL manual for the table lock command. Then write
a (pair) class method to lock and unlock the table.

It might be more helpful to explain why you think you need to lock the
table.
Brendon.

On May 6, 3:54 am, Venkat Eee <rails-mailing-l...@andreas-s.net>
wrote:

Venkat Eee

unread,
May 7, 2009, 1:33:02 AM5/7/09
to rubyonra...@googlegroups.com
Brendon Whateley wrote:
> If you are using MySQL, you need to make sure that you are using a DB
> engine that supports transactions if you plan to use them. You will
> probably have to use SQL to do the table locking, so if you are using
> mysql look in the MySQL manual for the table lock command. Then write
> a (pair) class method to lock and unlock the table.
>
> It might be more helpful to explain why you think you need to lock the
> table.
> Brendon.
>
> On May 6, 3:54�am, Venkat Eee <rails-mailing-l...@andreas-s.net>


Hey, thanks to all...
My code is working..thanks....

ActiveRecord::Base.connection.execute('LOCK TABLES tablename WRITE')
ActiveRecord::Base.connection.execute('UNLOCK TABLES')

Tom Z Meinlschmidt

unread,
May 7, 2009, 8:50:37 AM5/7/09
to rubyonra...@googlegroups.com


imagine you lock the tables.. and then you will be disconnected from the
session for some reason... tables are still locked, no way to work with
them. That's the point dbs have transations...

...

tom

--
===============================================================================
Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz
===============================================================================

Frederick Cheung

unread,
May 7, 2009, 1:18:44 PM5/7/09
to Ruby on Rails: Talk


On May 7, 1:50 pm, Tom Z Meinlschmidt <to...@meinlschmidt.org> wrote:
>
> > ActiveRecord::Base.connection.execute('LOCK TABLES tablename WRITE')
> > ActiveRecord::Base.connection.execute('UNLOCK TABLES')
>
> imagine you lock the tables.. and then you will be disconnected from the
> session for some reason... tables are still locked, no way to work with
> them. That's the point dbs have transations...

actually mysql releases table locks held by a client if connection to
that client dies (I suppose it might take a while for it to notice
though). Table locks are generally not a very good thing generally.

Fred

>
> ...
>
> tom
>
> --
> =========================================================================== ====
Reply all
Reply to author
Forward
0 new messages