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

Posted

技术标签:

【中文标题】如何检查 PostgreSQL 服务器 Mac OS X 的状态【英文标题】:How to check status of PostgreSQL server Mac OS X 【发布时间】:2011-12-19 23:56:59 【问题描述】:

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

【问题讨论】:

您还应该注意 Mac OS/X 上的多个版本的 postgres。如果您已经通过自制软件安装了 postgres,那么当您的路径设置不正确时,您可能会收到上述错误 - 我只是不小心捏造了我的路径,一切都开始使用 postgres 的系统安装,在我将路径调整为之前效果不佳使用 brew 安装 【参考方案1】:

您可以使用 brew 来启动/停止 pgsql。我在我的 ~/.bashrc 文件中遵循了捷径

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

【讨论】:

关于How to check status不启动/停止pgsql的问题! 你可以试试... brew services list | grep postgres 喜欢这些别名!【参考方案2】:

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

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

【讨论】:

psql -c "SELECT 1" -d dbname > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 & 如果您想一次性检查和启动 postgres(方便用于自动化脚本)。【参考方案3】:

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

来自docs:

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

【讨论】:

9.3 之前的 psql 如何检查相同的内容?【参考方案4】:

您可以运行以下命令来确定 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 数据库服务器状态。【参考方案5】:

你可能没有初始化 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 这样的好工具!并且它被配置为阻止流量,那么您的页面将看不到数据库。

【讨论】:

【参考方案6】:

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

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

【讨论】:

好的,如果我没有找到类似的东西,我该如何启动服务器? pgrep postgres 也可以。或ps auxwww | grep [p]ostgres 以防止grep 被拾取。 嘘,嘘:ps | grep 渎职建议。 pgrep 勉强可以接受。 pg_ctl status 很棒ps auxwww | grep postgres 将匹配 grep postgresless /var/log/postgres/whatever 需要注意的是,数据库集群目录/Library/PostgreSQL/8.3/data是用户通过initdb命令任意创建的。这是8.3 doc【参考方案7】:

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

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

【讨论】:

@Ramy 你用 bin 替换了路径中的 var 嗯...好的。我想我需要检查我的安装位置。请查看新的更新。 你是如何安装 postgres 的?你在安装 postgres 后运行 initdb 了吗?

以上是关于如何检查 PostgreSQL 服务器 Mac OS X 的状态的主要内容,如果未能解决你的问题,请参考以下文章

mac默认安装postgresql, 如何让postgresql可以远程访问

通过终端在 Mac 上停止 postgreSQL 服务

如何在 Mac OS 上使用自制软件将 postgresql 从 10.1 降级到 9.6 [关闭]

使用 brew 在 mac 上安装特定版本的 postgresql

在 Linux 命令行上检查 postgresql jdbc 驱动程序版本的命令是啥?

如何检查 PostgreSQL 中的复制延迟?