在PSycopg2 / Postgres上执行查询时展开Timeout

时间:2014-02-13 01:50:49

标签: sql postgresql psycopg2

我正在处理需要数小时才能执行的复杂查询。 我正在使用PSycopg2

阅读此Post。我补充说:

 import os.environ
    ['PGOPTIONS'] = '-c statement_timeout=1000000'

现在,我每次都会收到错误,执行此查询:

import psycopg2
>>> cnn = psycopg2.connect("dbname=test options='-c statement_timeout=1000'")
>>> cur = cnn.cursor()
>>> cur.execute("select pg_sleep(200000)")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
psycopg2.extensions.QueryCanceledError: canceling statement due to statement timeout

我的问题: 如何强制应用程序花费很长时间来处理查询?

1 个答案:

答案 0 :(得分:6)

如果您希望应用程序花费很长时间来处理查询,则必须删除强制它提前终止的语句超时。

卸下:

 import os.environ
    ['PGOPTIONS'] = '-c statement_timeout=1000000'

并在您的连接字符串中删除options条目。

>>> cnn = psycopg2.connect("dbname=test")

现在,如果您希望保留一般的超时,但只为此查询覆盖它,那么在查询之前,显式SET statement_timeout覆盖您设置的默认值:

cur.execute("SET statement_timeout = 0")
cur.execute("select pg_sleep(200000)")

......如果是这样的话为什么你不这么说