2

我刚刚开始使用 psycopg2 模块访问本地 PostgreSQL 服务器,我想要一种方法来检查服务器是否已经启动,以便我的程序可以在我尝试启动服务器时处理错误:

psqldir = 'C:/Program Files/PostgreSQL/9.2/bin'    # Windows
username = os.environ.get('USERNAME')
dbname = 'mydb'
os.chdir(psqldir)
os.system('pg_ctl start -D C:/mydatadir')   # Error here if server already started
conn = psycopg2.connect('dbname=' + dbname + ' user=' + username)
cur = conn.cursor()

我做了一些实验,似乎这会返回一个“0”或“3”,这可以解决我的问题,但我没有在 PostgreSQL/psycopg2 手册上找到任何信息来确认这是否是记录在案的行为:

server_state = os.system('pg_ctl status -D C:/mydatadir')

最好的方法是什么?谢谢!

4

2 回答 2

4

来自:_pg_ctl documentation

-w

等待启动或关闭完成。等待是关机的默认选项,但不是启动。等待启动时​​,pg_ctl 反复尝试连接服务器。等待关闭时,pg_ctl 等待服务器删除其 PID 文件。pg_ctl 根据启动或关闭的成功返回一个退出代码。

您还会发现pg_ctl status有用的:

statusmode 检查服务器是否在指定的数据目录中运行。如果是,则显示用于调用它的 PID 和命令行选项。如果服务器未运行,则该进程返回退出状态 3。

于 2013-04-20T10:08:04.243 回答
0

尝试使用 pgrep 命令。

proc = subprocess.Popen(["pgrep -u postgres -f -- -D"], stdout=subprocess.PIPE, shell=True)
    (out, err) = proc.communicate()
    try:
        if int(out) > 0:
            return True
    except Exception as e:
        return False
于 2021-10-13T08:13:34.843 回答