我在虚拟环境中使用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_COMMITTED
和autocommit=False
同步模式。
任何有助于解决这一问题的建议都将不胜感激。
很抱歉,我的代码有问题,由于异常,执行没有到达打印通知并从列表中弹出的部分。因此,它们会堆积起来,并在没有引发异常的查询后打印出来。