Як перевірити стан сервера 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.