Psycopg `connection.notifications'包含属于以前查询而非最近查询的通知



我在虚拟环境中使用Python 2.7.3和Psycopg 2.5.4连接到Debian 7.6 amd64上的PostgreSQL 9.1.13。

我创建的连接对象的notices属性始终是它应该包含的PostgreSQL通知中的一个或多个查询。在我执行的每个查询(cursor.execute()conn.commit()cursor.close())之后,我运行:

while conn.notices:
    print(conn.notices.pop(0))

但这些通知似乎总是与之前的查询有关。我不确定我的程序中是否有错误,或者Psycopg是否懒洋洋地获取通知。有时,在一次查询后会打印出许多通知,这些通知都与以前的一些查询有关,这就让人怀疑psycopg是随机从服务器批量获取通知的。

我已经使用libpqxx C++库连接到同一个DB,并且我可以注册用于处理的通知处理程序能够及时工作,正如预期的那样。所以问题不可能出在发出通知的DB触发器上。

psycopg连接处于ISOLATION_LEVEL_READ_COMMITTEDautocommit=False同步模式。

任何有助于解决这一问题的建议都将不胜感激。

很抱歉,我的代码有问题,由于异常,执行没有到达打印通知并从列表中弹出的部分。因此,它们会堆积起来,并在没有引发异常的查询后打印出来。

最新更新