postgres 缓存我的查询吗?
Is postgres caching my query?
我有一个非常简单的 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 正在基于每个客户端连接缓存我的查询?
PostgreSQL 没有查询缓存。
但是,如果您使用 SERIALIZABLE
隔离,您可能会看到相同的数据快照,因为您似乎是在单个事务中执行所有查询。
你真的应该在循环中的每个查询之后提交(或回滚)事务。 conn.rollback()
我有一个非常简单的 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 正在基于每个客户端连接缓存我的查询?
PostgreSQL 没有查询缓存。
但是,如果您使用 SERIALIZABLE
隔离,您可能会看到相同的数据快照,因为您似乎是在单个事务中执行所有查询。
你真的应该在循环中的每个查询之后提交(或回滚)事务。 conn.rollback()