Jak uruchomić serwer PostgreSQL na Mac OS X?

989

AKTUALIZACJA KOŃCOWA:

Zapomniałem uruchomić initdbpolecenia.

</ KOŃCOWA AKTUALIZACJA>

uruchamiając to polecenie

ps auxwww | grep postgres

Widzę, że postgres nie działa

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

rodzi to pytanie: Jak uruchomić serwer Postgresql?

aktualizacja:

>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

aktualizacja 2:

Dotyk nie był udany, więc zrobiłem to zamiast tego:

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

Ale kiedy próbuję uruchomić serwer Railsowy, nadal widzę to:

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

aktualizacja 3:

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

aktualizacja 4:

Odkryłem, że NIE BYŁO pg_hba.conf (tylko pg_hba.conf.sample), więc zmodyfikowałem próbkę i zmieniłem jej nazwę (aby usunąć .sample). Oto zawartość:

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

ale nie rozumiem tego:

> 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

również:

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

aktualizacja 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.

aktualizacja 6:

to wydaje się dziwne:

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

chociaż zrobiłem to:

>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

więc zrobiłem to:

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

więc próbowałem tego:

> 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 

wciąż pojawia się ten sam komunikat „Czy serwer działa?” wiadomość.

Ramy
źródło
Jak zainstalowałeś Postgres? Czy korzystałeś z menedżera pakietów lub instalacji ręcznej?
James Allman,
1
nie pamiętam dokładnie, ale został już zainstalowany lub uruchomiłem „brew install postgres”. Skłoniłbym się do tego drugiego, ale znowu, nie jestem w 100% pewien.
Ramy
Użyj sudo, tj.sudo pg_ctl...
czeski
54
Głosowałem za tym tylko dlatego, że AKTUALIZACJA KOŃCOWA bardzo mnie rozśmieszyła! : D
pkoch
14
Musiałem głosować, przychodzę tu co najmniej 3 razy w tygodniu, aby skopiować pierwszą komendę pg_ctl, aby zrestartować psql po nieoczekiwanym zakończeniu. Heh muszę się tego nauczyć: D Dzięki, stary!
lucygenik

Odpowiedzi:

1847

Homebrew menedżer Pakiet zawiera launchctl listy właściwości uruchomi się automatycznie. Aby uzyskać więcej informacji, uruchom brew info postgres.

Uruchom ręcznie:

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

Zatrzymaj ręcznie:

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

Uruchom automatycznie:

„Aby uruchomić, uruchom teraz postgresql i uruchom ponownie przy logowaniu:”

brew services start postgresql


Jaki jest wynik pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Jaki jest wynik pg_ctl -D /usr/local/var/postgres status?

Czy w server.log są jakieś komunikaty o błędach?

Upewnij się, że połączenia tcp localhost są włączone w pg_hba.conf:

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

Sprawdź nasłuchiwanie adresów i portu w pliku 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)

Sprzątanie

Postgres najprawdopodobniej został zainstalowany za pośrednictwem Homebrew , Fink , MacPorts lub instalatora EnterpriseDB .

Sprawdź dane wyjściowe następujących poleceń, aby określić, z którym menedżerem pakietów został zainstalowany:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
James Allman
źródło
1
@Ramy Czy dotyk się powiódł? Sprawdź istnienie i uprawnienia / usr / local / var / postgres i server.log . Powinien to być rw dla twojego identyfikatora użytkownika.
James Allman,
1
@Ramy: Czy możesz podać jakieś informacje w /usr/local/var/postgres/server.log? Twoja instalacja może być uszkodzona i może być szybsze czyszczenie i ponowna instalacja przy użyciu znanego źródła, takiego jak Homebrew.
James Allman,
10
Dlaczego to wszystko jest konieczne? Dlaczego nie możesz po prostu rozpocząć postgresu tak, jak uruchamiasz węzeł?
Kinnard Hockenhull
32
co za absurdalnie skomplikowane polecenie, aby tylko uruchomić i zatrzymać program
ahnbizcad
3
To nadal działa, ale jest trochę nieaktualne. Poniższa odpowiedź brew services start postgresqljest bardziej aktualna i prosta.
mthorley,
372

Jeśli chcesz ręcznie uruchomić i zatrzymać postgresql (zainstalowany przez homebrew), najprostszym sposobem jest:

brew services start postgresql

i

brew services stop postgresql

Jeśli masz konkretną wersję, pamiętaj o sufiksie wersji, na przykład:

brew services start postgresql@10
malopezcruz
źródło
7
Chciałbym wiedzieć brew serviceswcześniej ... to jedyne rozwiązanie, które działa dla mnie. <3 dzięki!
seanlinsley
5
brew tap gapple/servicessprawi, że komenda usług piwowarskich zacznie ponownie działać
Fabian Leutgeb
4
Wygląda na to, że brew tap homebrew/servicesnadal działa github.com/Homebrew/homebrew-services
kangkyu
4
Działa po initdb pomyślnym uruchomieniu. W przeciwnym razie po cichu zawiedzie (ale wydaje się, że zadziałało, a usługa jest wyświetlana jako rozpoczęta w brew services list.
Dmitri,
1
Musiałem uruchomić brew services restart postgresql, ponieważ uruchomiłem db z pg_ctl lub brew services startpowiedziałem, że „inny serwer może być uruchomiony” i zatrzymałem db z pg_ctl.
tomf
181

Miałem prawie taki sam problem, a ty zacytowałeś komendę initdb jako poprawkę. To było również rozwiązanie dla mnie, ale nie widziałem, żeby ktoś to tutaj opublikował, więc dla tych, którzy go szukają:

initdb /usr/local/var/postgres -E utf8
Yan
źródło
16
zadziałało to również dla mnie, initdb powiedział mi, że mam już skonfigurowaną konfigurację, więc usunąłem cały katalog: „rm -rf / usr / local / var / postgres” ponownie uruchomiłem polecenie, a mój serwer zaczyna działać, wielkie dzięki, proszę pana!
Jorge Sampayo,
5
tak, musiałem biec, rm -rf /usr/local/var/postgresa potem to zadziałało dla mnie
Lee McAlilly
2
To też działało dla mnie. Przed initdb musiałem również zmienić postgres dir ( chown _your username on your comp_ usr/local/var/postgres), a następnie initdb. Następnie serwer uruchamia się automatycznie po ponownym uruchomieniu (jeśli postępujesz zgodnie z instrukcjami Homebrew) lub ręcznie pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
septerr
2
Po initdb(łącznie z usunięciem starego katalogu, jeśli to konieczne), brew services start postgresqldziała
Dmitri
Jeśli pomysł wprowadzenia rm -rfwszystkiego, co aktualnie znajduje się w bazie danych, nieco Cię przeraża, zamiast całkowicie go usunąć, możesz użyć czegoś takiego jak mv /usr/local/var/postgres /usr/local/var/postgres.backupprzeniesienie go do nowego katalogu kopii zapasowej, a następnie uruchom polecenie, aby ponownie uruchomić bazę danych.
Hartley Brody
102

Jeśli komputer został nagle ponownie uruchomiony

Najpierw musisz usunąć plik. /usr/local/var/postgres/postmaster.pidNastępnie możesz zrestartować usługę przy użyciu jednej z wielu innych wymienionych metod, w zależności od instalacji.

Możesz to sprawdzić, przeglądając dzienniki Postgres, aby zobaczyć, co się dzieje: tail -f /usr/local/var/postgres/server.log

rafaelportela
źródło
2
Możesz sprawdzić, tail -f /usr/local/var/postgres/server.logczy powinieneś usunąć ten plik. ref coderwall.com/p/zf-fww/…
user1448319,
Mój był poniżej / Users / <użytkownik> / Library / Application \ Support / Postgres / var-9.6 / postmaster.pid
BatteryAcid
dla homebrew instaluje ścieżkę~/homebrew/var/postgres/postmaster.pid
blnc
2
Wow ... tylko to działało dla mnie! Czy możesz podać bardziej szczegółowe wyjaśnienie, dlaczego powinniśmy usunąć, postmaster.pidjeśli komputer został nagle ponownie uruchomiony?
adkl
1
To było bardzo przydatne
NinComPoop,
81

Innym podejściem jest użycie lunchy gem (otoki dla launchctl):

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

Aby rozpocząć postgres:

lunchy start postgres

Aby zatrzymać postgres:

lunchy stop postgres

Aby uzyskać więcej informacji, zobacz: „ Jak zainstalować PostgreSQL na komputerze Mac z Homebrew i Lunchy

pisaruk
źródło
w zależności od konfiguracji postgresu może być konieczne użycie postgresql zamiast postgres
Devon Kiss
72

Oto moje 2 centy: Utworzyłem alias dla postgres pg_ctl i umieściłem go w .bash_profile (moja wersja postgresql to 9.2.4, a ścieżka do bazy danych to /Library/PostgreSQL/9.2/data).

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

Uruchom nowy terminal.

I wtedy? Możesz uruchomić / zatrzymać serwer postgresql w ten sposób:

postgres.server start
postgres.server stop
Kenial
źródło
Podanie katalogu danych przy pomocy -D jest tutaj kluczem
więcej
3
Wciąż otrzymywałem „Proszę się zalogować (używając np.„ Su ”) jako (nieuprzywilejowany) użytkownik, który będzie właścicielem procesu serwera.” podczas uruchamiania tylko sudo. +1
pyb
Dzięki. Sugestie narzędzi postgres, aby używać su, nie udaje się. sudo -u działa doskonale. (na El Capitan)
uchuugaka
33

Najczystszym sposobem zdecydowanie start / stop / restart postgres jeśli zainstalowano go przez brewto po prostu rozładować i / lub załadować plik konfiguracyjny launchd że pochodzi z instalacji:

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

Pierwsza linia zatrzyma postgres, a druga linia ją uruchomi. Nie trzeba określać żadnych katalogów danych itp., Ponieważ wszystko jest w tym pliku.

Markus Amalthea Magnuson
źródło
działa świetnie dla PostgreSQL 9.5.3 zainstalowanego w OS X przez Brew !! dzięki!
jpswain,
działa to jak urok, gdy serwer
Postgres
5
Sam Homebrew ma proste opakowania dla tych poleceń, np .: brew services start postgres(i zatrzymaj). Rzuć a -vna końcu, a zobaczysz, co robi.
Mark Edington
28

Aby uruchomić serwer postgresql:

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

aby zakończyć serwer postgresql:

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

Możesz również utworzyć alias za pomocą interfejsu CLI, aby ułatwić:

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'

Dzięki nim możesz po prostu wpisać „pg-start”, aby uruchomić Postgres, i „pg-stop”, aby go wyłączyć.

Todd
źródło
3
Mam błąd, pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directoryjak to naprawić?
Rohman Masyhar
22

Do celów testowych uważam, że aplikacja PostgreSQL jest najlepszą opcją!

Uruchom aplikację, a serwer będzie działał. Zamknij aplikację, a serwer przestanie działać.

http://postgresapp.com/

Crystian Leão
źródło
9

po zainstalowaniu postgresql za pomocą homebrew:

brew install postgres

na końcu danych wyjściowych zobaczysz następujące metody uruchomienia serwera:

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

Myślę, że to najlepszy sposób.

Dla wygody możesz dodać alias do swojego .profile.

jkaluzka
źródło
7

W przypadku szybkiej testowej bazy danych jednorazowego użytku możesz uruchomić serwer na pierwszym planie.

Zainicjuj nową bazę danych Postgres w nowym katalogu

mkdir db
initdb db -E utf8
createdb public

Uruchom serwer na pierwszym planie (ctrl-C, aby zatrzymać serwer)

postgres -d db

W innej sesji powłoki połącz się z serwerem

psql -d public
k107
źródło
To wydaje się świetne, ale dla mnie nie działa - to nie był już serwer, aby wykonać krok utworzonyb. Kiedy próbuję uruchomić serw, mówi, że potrzebuje PGDATA lub pliku konfiguracyjnego, który jeszcze nie istnieje. czego mi brakuje?
szeitlin
7

Mam ten sam problem i wykonuję wszystkie aktualizacje od pierwszego postu. Ale po sprawdzeniu pliku dziennika:

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

Widzę prawdziwą przyczynę:

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

Po zmianie uprawnień do tego katalogu

chmod 0700 /usr/local/var/postgres

serwer postgres został uruchomiony.

Plik dziennika kontroli za każdym razem.

Roosh
źródło
5

PostgreSQL jest zintegrowany z Server.app dostępnym w App Store w Mountain Lion. Oznacza to, że jest już skonfigurowany i wystarczy go uruchomić, a następnie utworzyć użytkowników i bazy danych.

Wskazówka : nie zaczynaj od zdefiniowania $ PGDATA itd., Weź lokalizacje plików bez zmian.

Miałbyś ten plik: Miałbyś /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Zacząć:

sudo serveradmin start postgres

Proces rozpoczął się od argumentów:

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Library / Server / PostgreSQL / Data -c listen_addresses = 127.0.0.1, :: 1 -c log_connections = on -c log_directory = / Library / Logs / PostgreSQL -c nazwa_pliku_logu = PostgreSQL.log -c log_line_prefix =% t -c log_lock_waits = na -c log_statement = ddl -c log_kolektor = na -c unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group = _

Możesz sudo:

sudo -u _postgres psql template1

Lub połącz:

psql -h localhost -U _postgres postgres

Możesz znaleźć katalog danych, wersję, status działania itd. Za pomocą

sudo serveradmin fullstatus postgres  
datasmid
źródło
Nie mogłem znaleźć wiele innych, które pokazałyby, jak korzystać z wbudowanego Postgres. Pomógł mi również znaleźć polecenie serveradmin. Dzięki
Jason S
Uruchamianie usługi jako użytkownik root (sudo) zdecydowanie nie jest dobrym pomysłem, gdy tylko pojawia się problem bezpieczeństwa, cały komputer jest zagrożony.
Carlos Barcelona
Postgresql nie działa jako root, ale jako _postgres.
bbaassssiiee
5

Odmiana tej odpowiedzi: 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
substancji
źródło
Powinieneś dodać link do odpowiedzi, do której się odwołujesz.
Jeffrey Bosboom
Było to pomocne, ponieważ mój pg działał dobrze i nagle przestał działać i nie mógł znaleźć folderu / var / postgres.
shinesecret
Czy ktoś mógłby komentować, dlaczego jest to lepsze od połączonej odpowiedzi? Jak zobaczyłem, już głosowałem za ostatnim razem, gdy miałem podobny problem, zamierzam go użyć, ponieważ nie podano tu powodu.
MCB
4

Do celów programistycznych jednym z najprostszych sposobów jest zainstalowanie Postgres.app z oficjalnej strony . Można go uruchomić / zatrzymać z folderu Aplikacje lub za pomocą następujących poleceń w terminalu:

# start
open -a Postgres

# stop
killall Postgres
killall postgres
Melnosta
źródło
18
killallprawdopodobnie nie jest najlepszym sposobem na zatrzymanie bazy danych.
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.
Zee
źródło
4

Jeśli zainstalowałeś przy użyciu naparu, poniższe polecenie powinno wystarczyć.

brew services restart postgresql

I to czasami może nie działać, w takim przypadku poniżej dwa polecenia powinny zdecydowanie działać

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

pg_ctl -D /usr/local/var/postgres start
shanu khera
źródło
1

żadna z powyższych odpowiedzi nie rozwiązała problemu, mimo że otrzymałem te same komunikaty o błędach. Udało mi się przywrócić działanie instancji, usuwając istniejący plik postmaster.pid, który został zablokowany i nie zezwalałem na połączenia.

Swedendrift
źródło
1

W przypadku Macports wystarczy użyć polecenia load / unload i nazwy portu działającego serwera:

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

więc nie musisz pamiętać, gdzie /Library/LaunchDaemons/org.macports.postgresql96.plistznajduje się plik

Steve
źródło
1

Jeśli zainstalowałeś Postgres przy użyciu instalatora EnterpriseDB, to co sugeruje @Kenial, jest właściwą drogą.

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop
hithacker
źródło
1

które działało dla mnie (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

lub pierwszy cd /Library/PostgreSQL/9.6/bin/

Dmitrij Evgrafoov
źródło
1

$ brew upgrade postgres

naprawiłem to dla mnie.

To oczywiście zaktualizuje twoją wersję postgres i zaktualizuje / zainstaluje wszelkie zależności.

OSTRZEŻENIE: Zrób to, wiedząc, że Twoja wersja postgresql prawdopodobnie się zmieni. Dla mnie to nie była wielka sprawa.

thedanotto
źródło
0

W systemie Mac / OSX bardzo podoba mi się LaunchRocket dla tej i innych usług w tle, z których korzystałem podczas programowania.

https://github.com/jimbojsb/launchrocket

Ta strona zawiera ładne instrukcje dotyczące instalacji: http://macappstore.org/launchrocket/

Daje to ładny ekran w Preferencjach systemowych, który umożliwia uruchamianie, ponowne uruchamianie, rootowanie, uruchamianie podczas logowania.

theUtherSide
źródło
0

To działało dla mnie za każdym razem, inspirowane Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools obejmuje pkill. Jeśli nie masz Brew: https://brew.sh/

Punnerud
źródło
0

Istnieje pewien przypadek, który może być komuś pomocny:

Istnieje opcja, że ​​postgres.pid będzie wypełniony pewnym PID. Ale jeśli uruchomisz ponownie komputer i zanim postgress wróci ponownie, jakiś inny proces przyjmie ten PID. Jeśli tak się stanie, zarówno status pg_ctl, jak i usługa parzenia zapytane o status postgres, poinformują cię, że jest w GÓRZE. Tylko ps aux | grep i sprawdź, czy to naprawdę jest postgress

Adam Piotrowski
źródło
0

Homebrew jest drogą !!

Aby uruchomić usługę:

brew services start postgresql   

Aby to wymienić:

brew services list |grep postgres

aby zatrzymać usługę:

brew services stop postgresql 
Muhammad Dyas Yaskur
źródło
0

Jeśli nie zainstalowałeś go za pomocą brew i bezpośrednio z pakietu Mac, działało to dla mnie dla PostgreSQL 12 przy użyciu wszystkich domyślnych lokalizacji, zmiennych itp.

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop
J_F4C
źródło
0

Miałem ten sam problem. Próbowałem wszystkich tych rozwiązań, ale żadne nie działało.

Wreszcie udało się go uruchomić, zmieniając postgres HOST w ustawieniach Django z localhostna 127.0.0.1.

Pozdrawiam, jeśli to pomaga.

Tazeem
źródło