2017-07-17 26 views
2

私はPostgresクエリを実行し、その結果をダッシュ​​ボードに送るためのかなり簡単なPythonコードスニペットを持っています。私はpsycopg2を使用して定期的に同じクエリを実行しています。今のところループ機構については心配しないでください。postgresはクエリをキャッシュしていますか?

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;""" 

が、私は彼らが変更する必要があるにもかかわらず、同じ結果を得続けます。 conn.close()でループにpsycopg2.connect()行を移動すると、すべて正常に動作します。しかし、接続とcursor docsによると、私は同じカーソル(と、したがって、接続)を使用し続けることができるはずです。

これは、Postgresがクライアント接続ごとにクエリをキャッシュしていることを意味しますか?

+0

'sleep 'の直前でカーソルを'閉じる'べきでしょう。 –

+0

私はこれを試してみましたが、これはうまくいっていませんでした。「デルを実行するたびにではなく、今すぐカーソルを閉じる。この時点からカーソルを使用できなくなる.InterfaceErrorは、カーソル" –

答えて

3

PostgreSQLにはクエリキャッシュがありません。

ただし、SERIALIZABLEアイソレーションを使用している場合は、単一のトランザクション内ですべてのクエリを実行しているように見えるので、データの同じスナップショットが表示されている可能性があります。

ループ内の各クエリの後にトランザクションを実際にコミット(またはロールバック)する必要があります。 conn.rollback()

関連する問題