postgres是否缓存了我的查询?

时间:2017-07-17 23:38:27

标签: postgresql psycopg2 psycopg

我有一个非常简单的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()conn.close()行移动到循环中,一切正常。但是,根据连接和cursor docs,我应该能够始终使用相同的光标(以及连接)。

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

1 个答案:

答案 0 :(得分:4)

PostgreSQL没有查询缓存。

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

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