如何在不重新连接的情况下刷新postgresql查询?

时间:2013-10-14 23:16:57

标签: sql postgresql psycopg2

我有以下脚本来检索postgresql数据库的连接数:

import psycopg2, time

db_ip = "192.168.1.137"
db_port = "5432"
db_name = "postgres"
db_username = "postgres"
db_pw = "pass"

db = psycopg2.connect("host=%s port=%s dbname=%s user=%s password=%s" % (db_ip, db_port, db_name, db_username, db_pw))
cur = db.cursor()

while True:
    #~ db = psycopg2.connect("host=%s port=%s dbname=%s user=%s password=%s" % (db_ip, db_port, db_name, db_username, db_pw))
    #~ cur = db.cursor()
    cur.execute("SELECT count(*) FROM pg_stat_activity;")
    current_connections = cur.fetchall()
    print current_connections
    #~ cur.close()
    #~ db.close()
    time.sleep(1)

cur.close()
db.close()

实际连接的数量是波动的,但脚本只会重复返回初始值,除非我取消注释在while循环的每次迭代中重新建立连接的行。

这是设计,还是我错过了什么?理想情况下,我更喜欢连接一次,然后只是运行查询。

提前感谢任何指导。

1 个答案:

答案 0 :(得分:1)

是肯定的。这是设计你缺少的东西。 postgres试图呈现查询按顺序处理的错觉;好像他们一次只发生一个。这样,并发应用程序需要担心看到来自其他进程的部分更新数据。在将资金用于收款人之前,您不希望看到资金余额。这称为事务隔离。

您缺少的部分是您需要告诉postgres您已经完成了一项交易,并希望开始一项新交易。您可以通过在光标上发出commit,或关闭光标并从现有连接中获取新光标来实现此目的