Как проверить состояние сервера PostgreSQL Mac OS X - PullRequest
84 голосов
/ 02 ноября 2011

Как узнать, работает ли мой сервер 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 ]

84 голосов
/ 02 ноября 2011

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

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
42 голосов
/ 03 сентября 2013

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

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

15 голосов
/ 05 мая 2016

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

Из документов :

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

10 голосов
/ 02 ноября 2011

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

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
4 голосов
/ 17 сентября 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...