Thread: Can statement_timeout emulated NOWAIT?
I've researched the recent discussions about statement_timeout and NOWAIT and I'd like to confirm my understanding of the situation before acting on it. Please let me know if the following statements are true: - LOCK TABLE ... NOWAIT has been checked in and will be available in 7.5 - SELECT ... FOR UPDATE NOWAIT is in the TODO list (among other NOWAIT commands) but it will also be available in 7.5 - Using "SET LOCAL statement_timeout=xxx" can be used before "SELECT ... FOR UPDATE" to emulate NOWAIT when the select issimple and involves a relatively small number of rows. That is, the following: BEGIN; SET LOCAL statement_timeout=3000; SELECT ... FOR UPDATE; -- (1 row) COMMIT; will be equivalent to: BEGIN; SELECT ... FOR UPDATE NOWAIT; COMMIT; - The NOWAIT feature will be able to handle select-for-updates that involve many rows better than statement_timeout becauseit will track timeouts on a row by row basis, which eliminates false positives. That is, if the statement_timeoutis too short for the select, it might fail before finishing the select instead of failing because of lockedrow. - The error raised by statement_timeout and NOWAIT will be the same. Basically, I'd like to write low level code that implements NOWAIT in the application using statement_timeout. Later on, 7.5, I'd be able to reimplement the low level functions using NOWAIT without having to change the higher level code. Your thoughts and comments are appreciated. Thanks Luis P Caamano Atlanta, GA, USA
"Luis P Caamano" <lcaamano@mindspring.com> writes: > I've researched the recent discussions about statement_timeout > and NOWAIT and I'd like to confirm my understanding of the > situation before acting on it. Please let me know if the > following statements are true: > - LOCK TABLE ... NOWAIT has been checked in and will be available > in 7.5 Yes. > - SELECT ... FOR UPDATE NOWAIT is in the TODO list (among other > NOWAIT commands) but it will also be available in 7.5 I haven't seen anyone working on that. > - Using "SET LOCAL statement_timeout=xxx" can be used before > "SELECT ... FOR UPDATE" to emulate NOWAIT when the select > is simple and involves a relatively small number of rows. Yes, if you are sure you know how long the select "ought" to take. > - The error raised by statement_timeout and NOWAIT will be the > same. Wouldn't expect so. (Right now, I think statement_timeout reports the same error code as query cancel, which is pretty bogus also.) regards, tom lane
Yes, I think these are all correct, except I am not positive FOR UPDATE NOWAIT will be in 7.5 unless someone codes it. --------------------------------------------------------------------------- Luis P Caamano wrote: > > I've researched the recent discussions about statement_timeout > and NOWAIT and I'd like to confirm my understanding of the > situation before acting on it. Please let me know if the > following statements are true: > > - LOCK TABLE ... NOWAIT has been checked in and will be available > in 7.5 > > - SELECT ... FOR UPDATE NOWAIT is in the TODO list (among other > NOWAIT commands) but it will also be available in 7.5 > > - Using "SET LOCAL statement_timeout=xxx" can be used before > "SELECT ... FOR UPDATE" to emulate NOWAIT when the select > is simple and involves a relatively small number of rows. > That is, the following: > > BEGIN; > SET LOCAL statement_timeout=3000; > SELECT ... FOR UPDATE; -- (1 row) > COMMIT; > > will be equivalent to: > > BEGIN; > SELECT ... FOR UPDATE NOWAIT; > COMMIT; > > - The NOWAIT feature will be able to handle select-for-updates > that involve many rows better than statement_timeout because > it will track timeouts on a row by row basis, which eliminates > false positives. That is, if the statement_timeout is too > short for the select, it might fail before finishing the select > instead of failing because of locked row. > > - The error raised by statement_timeout and NOWAIT will be the > same. > > Basically, I'd like to write low level code that implements > NOWAIT in the application using statement_timeout. Later on, > 7.5, I'd be able to reimplement the low level functions using > NOWAIT without having to change the higher level code. > > Your thoughts and comments are appreciated. > > Thanks > > Luis P Caamano > Atlanta, GA, USA > > > ---------------------------(end of broadcast)--------------------------- > TIP 7: don't forget to increase your free space map settings > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
Excellent! Thanks for your prompt replies. -- Luis P Caamano Atlanta, GA, USA