How to lock and unlock table in ruby on rails?


#1

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,


#2

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.


#3

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 E. removed_email_address@domain.invalid


#4

Fernando P. 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.


#5

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 E. removed_email_address@domain.invalid

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

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


#6

Venkat E. wrote:

On May 6, 3:54�am, Venkat E. removed_email_address@domain.invalid

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

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…

tom

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

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


#7

On May 7, 1:50 pm, Tom Z Meinlschmidt removed_email_address@domain.invalid 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