我在virtualenv中使用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 ++库连接到同一个数据库,我可以注册进行处理的通知处理程序可以及时按预期工作。所以问题不在于发出通知的数据库触发器。
psycopg连接处于ISOLATION_LEVEL_READ_COMMITTED
和autocommit=False
同步模式。
任何有助于解决此问题的建议都将不胜感激。
答案 0 :(得分:0)
抱歉,我的代码是错误的,并且由于例外,执行没有到达通知被打印并从列表中弹出的部分。因此,在没有提出异常的查询后,他们会堆积起来并打印出来。