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

时间:2011-11-02 03:10:16

标签: macos postgresql

如何判断我的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

7 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:42)

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

$ pg_ctl status

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

以下是我在post {~/.bashrc文件中的内容:

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

答案 2 :(得分:18)

你可能没有发布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这样的好人!并且它被配置为阻止流量,然后您的页面将看不到数据库。

答案 3 :(得分:13)

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

来自docs

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

答案 4 :(得分:9)

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

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

答案 5 :(得分:4)

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

最好使用另一种方法,例如使用psql来运行简单查询并检查退出代码,例如psql -c 'SELECT 1',或使用pg_isready to check the connection status

答案 6 :(得分:0)

您可以使用brew启动/停止pgsql。我在我的〜/ .bashrc 文件

中使用了快捷方式
alias start-pg='brew services start postgresql'
alias stop-pg='brew services stop postgresql'
alias restart-pg='brew services restart postgresql'