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