如何检查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
来检查连接状态 。