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

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для проверки состояния соединения.