Как проверить статус сервера 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?

Update:

> 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

Ответ 1

Самый простой способ проверить запущенные процессы:

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

Ответ 2

Вы можете выполнить следующую команду, чтобы определить, выполняется ли 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

Ответ 3

Вероятно, вы не инициировали 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! и он был настроен для блокировки трафика, тогда ваша страница не увидит базу данных.

Ответ 4

Это зависит от того, где установлен ваш сервер postgresql. Вы используете pg_ctl для запуска сервера вручную, как показано ниже.

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

Ответ 5

Как и в PostgreSQL 9.3, вы можете использовать команду pg_isready, чтобы определить статус соединения сервера PostgreSQL.

Из docs:

pg_isready возвращает 0 в оболочку, если сервер принимает соединения нормально, 1, если сервер отклоняет соединения (например, во время запуска), 2, если не было ответа на попытку подключения, и 3, если не была предпринята попытка ( например, из-за недопустимых параметров).

Ответ 6

Команда pg_ctl status, предлагаемая в других ответах, проверяет, существует ли почтовый мастер, и если да, то он сообщает об этом. Это не обязательно означает, что он готов принимать соединения или выполнять запросы.

Лучше использовать другой метод, например, с помощью psql для запуска простого запроса и проверки кода выхода, например. psql -c 'SELECT 1' или используйте pg_isready чтобы проверить состояние подключения.