Search Postgresql Archives

Parameter setting in multi-statement command; I got bit today

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Just FYI... maybe I'm the only Pg veteran who didn't know this but;

Parameter settings in a multi-statement command are not in effect for
later statements in same command.  They will take effect on later
commands however as seen below.

The 2 seconds statement timeout does nothing to prevent the sleep(10)
from completing. 

Platform was Python 2.6 and EDB 8.2.  In the real world, we discovered
this because, I was using such an approach to set a 15 second timeout
so that the next statement, an exclusive lock request would abort is
couldn't be obtained after 15 secs.

This was to avoid contention  in situation where a long-running report
was holding a lock.  

This behavior is quite likely documented somewhere but if so, not
apparent to me. 

Silly example follows...


$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>import pgdb
>conn = pgdb.connect()
>cur = conn.cursor()
>cur.execute("set statement_timeout to '2s'; select pg_sleep(10)")
# first invocation of this succeeds due to the 2s timeout not being
effective yet.

>cur.execute("select pg_sleep(10)")
# A 2s delay here and then exception

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/pgdb.py", line 259, in execute
    self.executemany(operation, (params,))
  File "/usr/lib/python2.6/dist-packages/pgdb.py", line 289, in executemany
    raise DatabaseError("error '%s' in '%s'" % (msg, sql))
pg.DatabaseError: error 'ERROR:  canceling statement due to statement timeout
' in 'set statement_timeout to '2s'; select pg_sleep(10)'

It is tedious and I guess mostly unnecessary to do cur.execute("foo")
for each statement and as such, a clever  guy might adopt the habit
of piling all sorts of code into a single execute().

Along these lines, I'd be curious to know of other good reasong for
*not* combining statements like this. 

Thanks>

-- 
Jerry Sievers
Postgres DBA/Development Consulting
e: postgres.consulting@xxxxxxxxxxx
p: 732.216.7255

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux