如何检查 PostgreSQL 服务器 MacOSX 的状态

如何判断 Postgreql 服务器是否正在运行?

我收到一条信息:

[~/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
281753 次浏览

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

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

它取决于 postgreql 服务器的安装位置。

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

你可能没有邀请 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 这样好的!而且它被配置为阻塞流量,那么你的页面将不会看到数据库。

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

$ pg_ctl status

You'll also want to set the PGDATA environment variable.

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

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

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

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

来自 医生:

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

您可以使用 brew 来启动/停止 pgsql

alias start-pg='brew services start postgresql'
alias stop-pg='brew services stop postgresql'
alias restart-pg='brew services restart postgresql'