4

我有一个非常简单的 Python 代码片段来运行 Postgres 查询,然后将结果发送到仪表板。我psycopg2用来定期运行相同的查询。我们暂时不用担心循环机制。

    conn = psycopg2.connect(<connection info>)

    while True:
        # Run query and update dashboard
        cur = conn.cursor()
        cur.execute(q_tcc)
        query_results = cur.fetchall()

        update_dashboard(query_results)
        time.sleep(5)

作为参考,实际查询是:

q_tcc = """SELECT client_addr, application_name, count(*) cnt FROM pg_stat_activity
       GROUP BY client_addr, application_name ORDER BY cnt DESC;"""

当我运行它时,即使它们应该改变,我仍然得到相同的结果。如果我psycopg2.connect()用 a 将该行移入循环conn.close(),则一切正常。然而,根据连接和游标文档,我应该能够一直使用相同的游标(因此,连接)。

这是否意味着 Postgres 在每个客户端连接的基础上缓存我的查询?

4

1 回答 1

6

PostgreSQL 没有查询缓存。

但是,如果您使用SERIALIZABLE隔离,您可能会看到相同的数据快照,因为您似乎在单个事务中执行所有查询。

您应该在循环中的每个查询之后真正提交(或回滚)事务。conn.rollback()

于 2017-07-17T23:48:19.420 回答