如何检查 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 postgres
和 less /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 OS 上使用自制软件将 postgresql 从 10.1 降级到 9.6 [关闭]
使用 brew 在 mac 上安装特定版本的 postgresql