Як запустити PostgreSQL-сервер на Mac OS X?


989

ПІДСУМКОВА ОНОВЛЕННЯ:

Я забув запустити initdbкоманду.

</ ЗАКЛЮЧНЕ ОНОВЛЕННЯ>

запустивши цю команду

ps auxwww | grep postgres

Я бачу, що postgres не працює

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres

виникає питання: як запустити сервер postgresql?

оновлення:

>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

оновлення 2:

Дотик виявився невдалим, тому я зробив це натомість:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/          
server.log

Але коли я намагаюся запустити сервер рейлів, я все одно бачу це:

Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?

оновлення 3:

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

оновлення 4:

Я виявив, що НІЧОГО не було pg_hba.conf (лише pg_hba.conf.sample), тому я змінив зразок і перейменував його (для вилучення .sample). Ось зміст:

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust

але я цього не розумію:

> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start     
server starting
> pg_ctl -D /usr/local/var/postgres status                                     
pg_ctl: no server running

також:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

оновлення 5:

sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Password:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.

оновлення 6:

це здається дивним:

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory

хоча я зробив це:

>sudo find / -name "*postgresql.conf*"
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
/usr/share/postgresql/postgresql.conf.sample

тому я зробив це:

egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample 
#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)
                # supported by the operating system:
                #   %r = remote host and port

тому я спробував це:

> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf        
> cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf 

все ще отримує те саме "Чи працює сервер?" повідомлення.


Як ви встановили Postgres? Чи використовували ви менеджер пакунків або встановлення вручну?
Джеймс Аллман

1
Не можу точно пам’ятати, але це було вже встановлено, або я запустив «варити встановити postgres». Я б схилявся до останнього, але знову ж таки, я не впевнений на 100%.
Рамі

Використання sudo, тобтоsudo pg_ctl...
богемський

54
Я проголосував за це лише тому, що ЗАКЛЮЧНА ОНОВЛЕННЯ змусила мене дуже сильно сміятися! : D
pkoch

14
Довелося подати заявку, я приїжджаю сюди хоча б 3 рази на тиждень, щоб скопіювати першу команду pg_ctl, щоб перезапустити psql після несподіваного припинення .. хе, я мушу це навчитися: D Спасибі чувак!
lucygenik

Відповіді:


1848

Homebrew менеджер пакетів включає launchctl plists для автоматичного запуску. Для отримання додаткової інформації запустіть brew info postgres.

Почніть вручну:

pg_ctl -D /usr/local/var/postgres start

Зупинка вручну:

pg_ctl -D /usr/local/var/postgres stop

Почніть автоматично:

"Щоб запустити запуск postgresql зараз і перезапустити при вході:"

brew services start postgresql


Який результат pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Який результат pg_ctl -D /usr/local/var/postgres status?

Чи є повідомлення про помилки в server.log?

Переконайтеся, що підключення tcp localhost увімкнено в pg_hba.conf:

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

Перевірте адреси прослуховування та порт у postgresql.conf:

egrep 'listen|port' /usr/local/var/postgres/postgresql.conf

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)

Очищення

Postgres, швидше за все, був встановлений через Homebrew , Fink , MacPorts або інсталятор EnterpriseDB .

Перевірте висновок наступних команд, щоб визначити, з яким менеджером пакунків він був встановлений:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres

1
@Ramy Чи вдався дотик? Перевірте існування та дозволи дозволів / usr / local / var / postgres та server.log . Це має бути rw для вашого користувача.
Джеймс Аллман

1
@Ramy: Чи можете ви включити будь-яку інформацію в /usr/local/var/postgres/server.log? Ваша установка може бути пошкодженою, і можливо швидше очистити та перевстановити за допомогою відомого джерела, такого як Homebrew.
Джеймс Аллман

10
Чому все це потрібно? Чому ви не можете просто запустити postgres так, як ви починаєте вузол?
Кіннард Хокенхолл

32
яка смішно складна команда лише запустити та зупинити програму
ahnbizcad

3
Це все ще працює, але трохи застаріло. Відповідь нижче brew services start postgresql- більш сучасна та відверта відповідь.
mthorley

372

Якщо ви хочете вручну запустити та зупинити postgresql (встановлений через домашню мову), найпростішим способом є:

brew services start postgresql

і

brew services stop postgresql

Якщо у вас є конкретна версія, переконайтесь, що суфікс, наприклад:

brew services start postgresql@10

7
Мені б хотілося, щоб я дізнався про це brew servicesшвидше ... це єдине рішення, яке працює для мене. <3 спасибі!
seanlinsley

5
brew tap gapple/servicesзмусить команду пивоваріння знову працювати
Fabian Leutgeb

4
Схоже, brew tap homebrew/servicesвсе ще працює github.com/Homebrew/homebrew-services
kangkyu

4
Це працює після initdb успішного запуску. В іншому випадку він мовчки виходить з ладу (але , здається, працює, з показом обслуговування , як почав в brew services list.
Дмитро

1
Мені потрібно було запустити brew services restart postgresql, оскільки запустив db з pg_ctl або brew services startсказав "інший сервер може працювати" і зупинив db з pg_ctl.
tomf

181

У мене було майже те саме питання, і ви вказали команду initdb як виправлення. Це також було рішенням для мене, але я не бачив, щоб хтось розмістив його тут, тому для тих, хто шукає:

initdb /usr/local/var/postgres -E utf8

16
це також працювало для мене, initdb сказав мені, що я вже зробив конфігурацію, тому я видалив весь каталог: "rm -rf / usr / local / var / postgres" знову запустив вашу команду, і мій сервер зараз працює і працює, велике спасибі, сер!
Хорхе Самппайо

5
так, мені довелося бігати, rm -rf /usr/local/var/postgresі тоді це працювало для мене
Лі Макалілі

2
Це те, що працювало і для мене. Перш ніж initdb, мені довелося також подавити postgres dir ( chown _your username on your comp_ usr/local/var/postgres), потім initdb. Після цього сервер запускається автоматично при перезапуску (якщо ви дотримувались інструкцій Homebrew щодо цього) або вручну pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
септер

2
Після initdb(включаючи видалення старого каталогу при необхідності) brew services start postgresqlпрацює
Дмитро

Якщо ідея про rm -rfвсе, що зараз знаходиться у вашій базі даних, вас трохи лякає, замість того, щоб видалити її цілком, ви можете використовувати щось на зразок mv /usr/local/var/postgres /usr/local/var/postgres.backupпереміщення її до нового каталогу резервного копіювання, а потім запустіть команду, щоб знову запустити базу даних.
Хартлі Броди

102

Якщо ваш комп'ютер був різко перезавантажений

По-перше, вам потрібно видалити файл. /usr/local/var/postgres/postmaster.pidПотім ви можете перезапустити послугу, використовуючи один із багатьох інших згаданих методів залежно від встановлення.

Ви можете перевірити це, переглянувши журнали Postgres, щоб побачити, що може бути: tail -f /usr/local/var/postgres/server.log


2
Ви можете перевірити, tail -f /usr/local/var/postgres/server.logчи слід видаляти цей файл. ref coderwall.com/p/zf-fww/…
користувач1448319

У мене не було / Користувачі / <користувач> / Бібліотека / Застосування \ Підтримка / Postgres / var-9.6 / postmaster.pid
BatteryAcid

для домашнього ~/homebrew/var/postgres/postmaster.pid
мовлення

2
Нічого ... тільки це працювало для мене! Чи можете ви, будь ласка, дати більш детальне пояснення, чому ми повинні видалити, postmaster.pidякщо комп'ютер був різко перезавантажений?
adkl

1
Це було дуже корисно
NinComPoop

81

Ще один підхід - використання обіднього коштовного каменя (обгортки для startctl):

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy

Щоб почати postgres:

lunchy start postgres

Щоб зупинити постгреси:

lunchy stop postgres

Для отримання додаткової інформації дивіться: " Як встановити PostgreSQL на Mac з домашньою мовою та обіднім "


залежно від того, як ви налаштовуєте postgres, можливо, вам доведеться використовувати postgresql замість postgres
Devon Kiss

72

Ось мої 2 центи: я зробив псевдонім для postgres pg_ctl і вклав його в .bash_profile (моя версія postgresql - 9.2.4, а шлях до бази даних - /Library/PostgreSQL/9.2/data).

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

Запустіть новий термінал.

І потім? Ви можете запустити / зупинити ваш сервер postgresql за допомогою цього:

postgres.server start
postgres.server stop

Ключовим тут є визначення каталогу даних за допомогою -D
olore

3
Я продовжував отримувати "Будь ласка, увійдіть (використовуючи, наприклад," su ") як (непривілейований) користувач, який буде володіти сервером." при бігу просто судо. +1
піб

Дякую. Пропозиції інструментів постгресу щодо використання не мають збитку. sudo -u працює блискуче. (на Ель Капітан)
учугака

33

Найчистіше шлях далеко для запуску / зупинки / перезапуску Postgres , якщо ви встановили його через brewце просто вивантажити і / або завантажити файл конфігурації , який поставляється запуск програм з установкою:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Перший рядок зупинить постгреси, а другий рядок запустить його. Не потрібно вказувати жодні каталоги даних тощо, оскільки все є у цьому файлі.


відмінно підходить для PostgreSQL 9.5.3, встановлений на OS X через Brew !! Дякую!
jpswain

це працює як принадність, коли сервер postgres не працює належним чином і не приймає вхідні з'єднання
Augusto Samamé Barrientos

5
Сам Homebrew має прості обгортки для цих команд, наприклад: brew services start postgres(та зупинка). Накиньте -vна кінець, і ви зможете побачити, що це робить.
Марк Едінгтон

28

Щоб запустити сервер postgresql:

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

для завершення сервера postgresql:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

Ви також можете створити псевдонім за допомогою CLI, щоб полегшити його:

alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

За допомогою них ви можете просто ввести "pg-start", щоб запустити Postgres, і "pg-stop", щоб закрити його.


3
Я отримав помилку, pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directoryяк це виправити?
Rohman Masyhar

22

Для тестових цілей, я вважаю, що додаток PostgreSQL - найкращий варіант!

Запустіть додаток, і сервер працює і працює. Закрийте додаток, і сервер знизиться.

http://postgresapp.com/


9

коли ви встановлюєте postgresql за допомогою домашньої мови:

brew install postgres

наприкінці виводу ви побачите такі способи запуску сервера:

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:
    postgres -D /usr/local/var/postgres

Я думаю, що це найкращий спосіб.

Ви можете додати псевдонім у свій .profile для зручності.


7

Для швидкої одноразової тестової бази даних можна запустити сервер на передньому плані.

Ініціалізуйте нову базу даних Postgres у новому каталозі

mkdir db
initdb db -E utf8
createdb public

Запустіть сервер на передньому плані (ctrl-C, щоб зупинити сервер)

postgres -d db

В іншому сеансі оболонки підключіться до сервера

psql -d public

Це здається чудовим, але не працює для мене - це не був сервер, який вже запускався для того, щоб зробити створений крок. Коли я намагаюся запустити сервіс, він каже, що йому потрібен PGDATA або конфігураційний файл, які ще не існують. Що я пропускаю?
szeitlin

7

У мене така ж проблема і виконувати всі оновлення з першого повідомлення. Але після файлу журналу перевірки:

/usr/local/var/postgres/server.log

Я бачу справжню причину:

FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).

Після зміни дозволу на цей каталог

chmod 0700 /usr/local/var/postgres

сервер postgres запустився.

Кожен файл журналу перевірки.


5

PostgreSQL інтегрований у Server.app, доступний через App Store у Mountain Lion. Це означає, що він уже налаштований, і вам потрібно лише запустити його, а потім створити користувачів та бази даних.

Порада : Не починайте з визначення $ PGDATA тощо, прийміть розташування файлів як є.

Ви мали б цей файл: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Починати:

sudo serveradmin start postgres

Процес розпочався з аргументів:

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Бібліотека / Сервер / PostgreSQL / Дані -c liste_addresses = 127.0.0.1, :: 1 -c log_connections = on -c log_directory = / Бібліотека / Журнали / PostgreSQL -c log_filename = PostgreSQL.log -c log_line_prefix =% t -c log_lock_waits = on -c log_statement = ddl -c logging_collector = on -c unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group = _postgresc = _postgres

Ви можете судо:

sudo -u _postgres psql template1

Або підключіться:

psql -h localhost -U _postgres postgres

Ви можете знайти каталог даних, версію, стан запуску тощо

sudo serveradmin fullstatus postgres  

Не вдалося знайти багато іншого, що показало б, як використовувати вбудований Postgres. Допоміг мені також знайти команду serveradmin. Спасибі
Jason S

Запуск сервісу як root користувача (sudo), безумовно, не є хорошою ідеєю, як тільки виникає проблема безпеки, весь комп'ютер порушений.
Карлос Барселона

Postgresql працює не як root, а як _postgres.
bbaassssiiee

5

Варіація на цю відповідь: https://stackoverflow.com/a/13103603/2394728

initdb `brew --prefix`/var/postgres/data -E utf8`` &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start

Ви повинні додати посилання на відповідь, на яку ви посилаєтесь.
Джефрі Босбум

Це було корисно, оскільки моя сторінка нормально працювала, і раптом вона перестала працювати і не змогла знайти папку / var / postgres.
shinesecret

Чи може хтось прокоментувати, чому це вище, ніж відповідна відповідь? Оскільки я бачив, що я вже схвалював останній раз, коли у мене була подібна проблема, я збираюся його використовувати, оскільки тут немає жодної причини.
MCB

4

Для цілей розробки один з найпростіших способів - встановити Postgres.app з офіційного сайту . Його можна запустити / зупинити з папки Applications або за допомогою наступних команд у терміналі:

# start
open -a Postgres

# stop
killall Postgres
killall postgres

18
killallце, мабуть, не найкращий спосіб зупинити базу даних.
Risadinha

4
   # remove old database files (If there was any)
   $rm -rf /usr/local/var/postgres    # install the binary

    $ brew install postgresql

    # init it
    $ initdb /usr/local/var/postgres

    # start the postgres server
    $ postgres -D /usr/local/var/postgres

    # create your database
    $ createdb mydb


    # Access db.
    $ psql mydb
    psql (9.0.1)
    Type "help" for help.

4

Якщо ви встановили за допомогою варіння, нижче команди має бути достатньо.

brew services restart postgresql

І це іноді може не спрацювати, у цьому випадку, безумовно, повинні працювати дві команди

rm /usr/local/var/postgres/postmaster.pid

pg_ctl -D /usr/local/var/postgres start

1

жодна з наведених відповідей не вирішила проблему для мене, незважаючи на те, що отримували ті самі повідомлення про помилки. Мені вдалося створити резервну копію мого примірника, видаливши існуючий файл postmaster.pid, який був заблокований і не дозволяв з'єднатися.


1

Для макпортів просто використовуйте команду load / unload та ім'я порту працюючого сервера:

sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

тож вам не потрібно пам’ятати, де знаходиться /Library/LaunchDaemons/org.macports.postgresql96.plistфайл



1

Якщо ви встановили Postgres за допомогою інсталятора EnterpriseDB, тоді запропоновано @Kenial.

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

1

що працювало для мене (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

або спочатку cd /Library/PostgreSQL/9.6/bin/


1

$ brew upgrade postgres

виправив це для мене.

Це, звичайно, оновить вашу версію postgres та оновить / встановить будь-які залежності.

ПОПЕРЕДЖЕННЯ. Зробіть це, знаючи, що ваша версія postgresql, ймовірно, зміниться. Для мене це не було великою справою.


0

Для Mac / OSX мені дуже подобається LaunchRocket за цю та інші фонові послуги, які я використовував у розробці.

https://github.com/jimbojsb/launchrocket

На цьому веб-сайті є чудові інструкції щодо встановлення: http://macappstore.org/launchrocket/

Це дає вам гарний екран у ваших системних налаштуваннях, який дозволяє запускати, перезавантажувати, root, запускати під час входу.


0

Це працювало для мене кожен раз, надихаючи Крейга Рінгера:

brew install proctools
sudo pkill -u postgres

proctools включає в себе pkill. Якщо у вас немає Brew: https://brew.sh/



0

Є якийсь крайній випадок, який, можливо, буде корисним для когось:

Існує варіант, що у вас буде postgres.pid заповнений деяким PID. Але якщо ви перезавантажите машину, і до того, як після поступки знову повернеться, інший процес прийме цей PID. Якщо це станеться, і статус pg_ctl, і служба пивоваріння, запитуючи про статус постгресу, скажуть вам, що це ВГО. Просто ps aux | греп і перевір, чи справді це поступ


0

Домашня мова - це шлях !!

Щоб запустити послугу:

brew services start postgresql   

Щоб перелічити його:

brew services list |grep postgres

щоб зупинити послугу:

brew services stop postgresql 

0

Якщо ви не встановили його з brew та безпосередньо з пакету mac, це працювало для PostgreSQL 12 при використанні всіх локальних місць, змінних тощо.

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop

0

Я зіткнувся з тією ж проблемою. Випробували всі ці рішення, але жодне не спрацювало.

Нарешті вдалося змусити його працювати, змінивши postgres HOST у налаштуваннях Django з localhostна 127.0.0.1.

Бадьоріть, якщо це допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.