Як перевірити стан сервера PostgreSQL Mac OS X


102

Як я можу дізнатися, чи працює мій сервер 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

1
Також слід оглянути декілька версій постгресів на Mac OS / X. Якщо ви встановили postgres через homebrew, тоді ви можете отримати вищезгадану помилку, коли ваш шлях неправильно налаштований - я просто випадково зіпсував свій шлях і все почалося з використання системної установки postgres, яка не дуже добре працювала, поки я не налаштував шлях на використовуйте заварку
Jamie Cook

Відповіді:


94

Найпростіший спосіб перевірити запущені процеси:

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

ОК, і якщо я не знайду нічого подібного, як запустити сервер?
Рамі

4
pgrep postgresтакож працює. Або ps auxwww | grep [p]ostgresдля того, grepщоб не забрати.
Григорій Нісбет

1
Бу, шипить повторно: ps | grepпропозиція щодо неправильної роботи. pgrepприйнятно, ледве. pg_ctl statusце здорово . ps auxwww | grep postgresзбирається збігатися grep postgres, і less /var/log/postgres/whatever.
Чарльз Даффі

слід зазначити, що каталог кластерів баз даних /Library/PostgreSQL/8.3/dataдовільно створюється користувачем за допомогою initdbкоманди. ось 8,3 doc
GPL

58

Ви можете запустити таку команду, щоб визначити, чи працює поступ:

$ 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

З огляду на ваше повідомлення про помилку, я вважаю, що пропозиція SamGoody запустити вашу команду initdb вирішить вашу проблему "Підключення відхилено". Як тільки це буде виправлено, спробуйте мої пропозиції, щоб отримати статус вашого сервера postgres db.
l3x

26

Ви, мабуть, не ініціювали постгреси.

Якщо ви встановили за допомогою 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! і це було налаштовано для блокування трафіку, то ваша сторінка не буде бачити базу даних.


20

Станом на PostgreSQL 9.3, ви можете використовувати команду pg_isreadyдля визначення стану з'єднання сервера PostgreSQL.

З документів :

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


Як перевірити те саме на psql перед 9.3?
BRBdot

11

Це залежить від того, де встановлений ваш сервер postgresql. Ви використовуєте pg_ctl для ручного запуску сервера, як показано нижче.

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

@Ramy Ви замінили бін для var на шляху.
Джеймс Аллман

хммм ... добре. я думав, що мені потрібно перевірити, де моя установка. перегляньте нове оновлення.
Рамі

Як ви встановили postgres? Ви запустили initdb після встановлення postgres?
Nvick

5

The pg_ctl statusКоманда запропонувала в інших відповіді перевіряють , що процес поштмейстера існує , і якщо так повідомляє , що він працює. Це не обов'язково означає, що він готовий приймати з'єднання або виконувати запити.

Краще використовувати інший метод, як psql, наприклад psql -c 'SELECT 1', запустити простий запит і перевірити код виходу, наприклад , або використати pg_isready для перевірки стану з'єднання .


3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &якщо ви хочете перевірити та запустити postgres за один раз (зручно для сценаріїв автоматизації).
Кейт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.