Как проверить состояние сервера PostgreSQL Mac OS X
как я могу сказать, работает ли мой сервер 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
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
вы можете запустить следующую команду, чтобы определить, работает ли 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
вы, вероятно, не init postgres.
Если вы установили с помощью HomeBrew, инициализация должна быть запущена, прежде чем что-либо еще станет полезным.
чтобы увидеть инструкции, Запустите
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
Если у вас все еще есть проблемы, проверьте брандмауэр. Если вы используете хороший, как Руки прочь! и он был настроен на блокировку трафика, тогда ваша страница не будет видеть базу данных.
Это зависит от того, где установлен ваш сервер PostgreSQL. Вы используете pg_ctl вручную запустить сервер, как показано ниже.
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
начиная с PostgreSQL 9.3, вы можете использовать команду
pg_isready
для определения состояния подключения сервера PostgreSQL.С docs:
pg_isready возвращает 0 в оболочку, если сервер принимает соединения нормально, 1 если сервер отклоняет соединения (например, во время запуска), 2 если не было ответа на попытку подключения, и 3 если попытка не была сделана (например, из-за недопустимых параметров).
The
pg_ctl status
команда, предложенная в других ответах, проверяет, существует ли процесс postmaster, и если да, то сообщает, что он запущен. Это не обязательно означает, что он готов принимать соединения или выполнения запросов.лучше использовать другой метод, как с помощью
psql
для выполнения простого запроса и проверки кода выхода, напримерpsql -c 'SELECT 1'
, или использоватьpg_isready
для проверки состояния соединения.