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

我怎么知道我的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 

最简单的方法来检查正在运行的进程:

 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 

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

 $ pg_ctl status 

您还需要设置PGDATA环境variables。

这是我在~/.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 

你可能没有初始化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一样好的! 它被configuration为阻止stream量,那么你的页面将不会看到数据库。

这取决于你的postgresql服务器的安装位置。 您可以使用pg_ctl像下面那样手动启动服务器。

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

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

从文档 :

如果服务器正常接受连接,则pg_isready返回0;如果服务器拒绝连接(例如在启动期间),则返回1;如果没有响应连接尝试,则返回2;如果没有尝试,则返回3无效的参数)。

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

最好使用另一种方法,比如使用psql来运行一个简单的查询并检查退出代码,例如psql -c 'SELECT 1' pg_isready psql -c 'SELECT 1' ,或者使用pg_isready 来检查连接状态 。