如何检查PostgreSQL服务器Mac OS X的状态


101

如何判断我的Postgresql服务器是否正在运行?

我收到此消息:

[~/dev/working/sw] sudo bundle exec rake db:migrate 
rake aborted!
could not connect to server: Connection refused
    Is the server running on host "localhost" and accepting
    TCP/IP connections on port 5432?

更新:

> which postgres
/usr/local/bin/postgres
> pg_ctl -D /usr/local/bin/postgres -l /usr/local/bin/postgres/server.log start
pg_ctl: could not open PID file "/usr/local/bin/postgres/postmaster.pid": Not a directory

更新2:

>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory

1
您还应该在Mac OS / X上寻找postgres的多个版本。如果您是通过自制软件安装的postgres,那么当您的路径设置不正确时,您会收到上述错误-我只是不小心弄乱了我的路径,并且一切都开始使用postgres的系统安装,直到我将路径调整为使用brew install
Jamie Cook

Answers:


94

检查运行进程的最简单方法是:

ps auxwww | grep postgres

然后寻找看起来像这样的命令(您的版本可能不是8.3):

/Library/PostgreSQL/8.3/bin/postgres -D /Library/PostgreSQL/8.3/data

要启动服务器,请执行以下操作:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log

好的,如果我没有找到类似的东西,如何启动服务器?
拉米

4
pgrep postgres也可以。或ps auxwww | grep [p]ostgres防止grep被捡起。
格雷戈里·尼斯贝

1
嘘,他的回答是:ps | grep渎职建议。pgrep勉强可以接受 pg_ctl status伟大的ps auxwww | grep postgres要比赛grep postgres,和less /var/log/postgres/whatever
查尔斯·达菲

应该注意的是,数据库集群目录/Library/PostgreSQL/8.3/data是由用户通过initdb命令任意创建的。这是8.3 doc
GPL

58

您可以运行以下命令来确定postgress是否正在运行:

$ pg_ctl status

您还需要设置PGDATA环境变量。

这是我~/.bashrc的postgres文件中的内容:

export PGDATA='/usr/local/var/postgres'
export PGHOST=localhost
alias start-pg='pg_ctl -l $PGDATA/server.log start'
alias stop-pg='pg_ctl stop -m fast'
alias show-pg-status='pg_ctl status'
alias restart-pg='pg_ctl reload'

为了使它们生效,请记住像这样来源:

$ . ~/.bashrc

现在,尝试一下,您应该会得到以下信息:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres

给定您的错误消息,我敢打赌SamGoody建议运行您的initdb命令将解决您的“连接被拒绝”问题。修复之后,请尝试我的建议以获取您的postgres db服务器状态。
2013年

26

您可能没有初始化postgres。

如果使用HomeBrew安装,则必须先运行init,然后其他任何功能才可用。

要查看说明,请运行 brew info postgres

# Create/Upgrade a Database
If this is your first install, create a database with:
     initdb /usr/local/var/postgres -E utf8

To have launchd start postgresql at login:
   ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 
Then to load postgresql now:     
   launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist 
Or, if you don't want/need launchctl, you can just run:
    pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

运行该文件后,它应显示以下内容:

成功。现在,您可以使用以下命令启动数据库服务器:

postgres -D /usr/local/var/postgres or
pg_ctl -D /usr/local/var/postgres -l logfile start

如果仍然有问题,请检查防火墙。如果您使用像HandsOff这样的好东西!并且已将其配置为阻止流量,则您的页面将看不到数据库。


20

从PostgreSQL 9.3开始,您可以使用该命令pg_isready确定PostgreSQL服务器的连接状态。

文档

如果服务器正常接受连接,则pg_isready向外壳返回0;如果服务器拒绝连接(例如,在启动过程中),则返回1;如果对连接尝试没有响应,则返回2;如果未进行连接尝试(例如,由于无效的参数)。


您如何在9.3之前的psql中进行检查?
BRBdot

11

这取决于您的postgresql服务器的安装位置。您可以使用pg_ctl手动启动服务器,如下所示。

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

@Ramy你取代VAR的路径。
詹姆斯·奥尔曼

嗯...好。我以为我需要检查我的安装位置。请查看新的更新。
拉米

您是如何安装postgres的?安装postgres之后是否运行了initdb?
尼克

5

pg_ctl status其他答案中建议的命令将检查postmaster进程是否存在,如果存在,则报告该进程正在运行。这并不一定意味着它已经准备好接受连接或执行查询。

最好使用另一种方法,例如psql用于运行简单查询和检查退出代码,例如psql -c 'SELECT 1'或用于pg_isready 检查连接状态


3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &如果您想一次检查并启动postgres(对于自动化脚本来说很方便)。
凯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.