Wie starte ich den PostgreSQL-Server unter Mac OS X?

989

ENDGÜLTIGES UPDATE:

Ich hatte vergessen, den initdbBefehl auszuführen .

</ FINAL UPDATE>

durch Ausführen dieses Befehls

ps auxwww | grep postgres

Ich sehe, dass Postgres nicht läuft

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

Dies wirft die Frage auf: Wie starte ich den Postgresql-Server?

aktualisieren:

>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

Update 2:

Die Berührung war nicht erfolgreich, also habe ich dies stattdessen getan:

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

Aber wenn ich versuche, den Rails-Server zu starten, sehe ich immer noch Folgendes:

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

Update 3:

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

Update 4:

Ich fand, dass es KEINE pg_hba.conf gab (nur pg_hba.conf.sample), also habe ich das Sample geändert und umbenannt (um das .sample zu entfernen). Hier sind die Inhalte:

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

aber ich verstehe das nicht:

> 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

ebenfalls:

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

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

Update 6:

das scheint seltsam:

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

Ich habe dies jedoch getan:

>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

Also habe ich das gemacht:

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

Also habe ich das versucht:

> 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 

immer noch das gleiche "Läuft der Server?" Botschaft.

Ramy
quelle
Wie haben Sie Postgres installiert? Haben Sie einen Paketmanager oder eine manuelle Installation verwendet?
James Allman
1
Ich kann mich nicht genau erinnern, aber es wurde entweder bereits installiert oder ich habe "Brew Install Postgres" ausgeführt. Ich würde mich zu Letzterem neigen, aber ich bin mir nicht 100% sicher.
Ramy
Verwenden Sie sudo, dhsudo pg_ctl...
Bohemian
54
Ich habe dies nur deshalb hochgestimmt, weil mich das FINAL UPDATE sehr zum Lachen gebracht hat! : D
pkoch
14
Musste upvote, ich komme mindestens dreimal pro Woche hierher, um den allerersten pg_ctl-Befehl zu kopieren, um psql nach einer unerwarteten Beendigung neu zu starten. Heh, ich muss es lernen: D Danke, Alter!
lucygenik

Antworten:

1848

Der Homebrew- Paketmanager enthält Startlisten, die automatisch gestartet werden. Weitere Informationen finden Sie unter brew info postgres.

Manuell starten:

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

Manuell anhalten:

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

Automatisch starten:

"Damit startd postgresql jetzt startet und beim Login neu startet:"

brew services start postgresql


Was ist das Ergebnis von pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Was ist das Ergebnis von pg_ctl -D /usr/local/var/postgres status?

Gibt es Fehlermeldungen in der Datei server.log?

Stellen Sie sicher, dass TCP-Localhost-Verbindungen in pg_hba.conf aktiviert sind:

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

Überprüfen Sie die listen_addresses und den Port in 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)

Aufräumen

Postgres wurde höchstwahrscheinlich über Homebrew , Fink , MacPorts oder das EnterpriseDB- Installationsprogramm installiert.

Überprüfen Sie die Ausgabe der folgenden Befehle, um festzustellen, mit welchem ​​Paketmanager es installiert wurde:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
James Allman
quelle
1
@ Ramy Hat die Berührung Erfolg gehabt? Überprüfen Sie die Existenz und Berechtigungen von / usr / local / var / postgres und server.log . Es sollte rw für Ihre Benutzer-ID sein.
James Allman
1
@Ramy: Können Sie Informationen in /usr/local/var/postgres/server.log aufnehmen? Ihre Installation ist möglicherweise beschädigt und die Bereinigung und Neuinstallation mit einer bekannten Quelle wie Homebrew ist möglicherweise schneller.
James Allman
10
Warum ist das alles notwendig? Warum können Sie Postgres nicht einfach so starten, wie Sie den Knoten starten?
Kinnard Hockenhull
32
Was für ein lächerlich komplizierter Befehl, nur um das Programm zu starten und zu stoppen
Ahnbizcad
3
Dies funktioniert immer noch, ist aber etwas veraltet. Die Antwort unten brew services start postgresqlist eine aktuellere und einfachere Antwort.
Mthorley
372

Wenn Sie postgresql (über Homebrew installiert) manuell starten und stoppen möchten, ist der einfachste Weg:

brew services start postgresql

und

brew services stop postgresql

Wenn Sie eine bestimmte Version haben, stellen Sie sicher, dass Sie die Version mit einem Suffix versehen, zum Beispiel:

brew services start postgresql@10
malopezcruz
quelle
7
Ich wünschte, ich wüsste es brew servicesfrüher ... dies ist die einzige Lösung, die für mich funktioniert. <3 danke!
Seanlinsley
5
brew tap gapple/serviceswird den Befehl für die Brauereidienste wieder funktionieren lassen
Fabian Leutgeb
4
Sieht aus wie brew tap homebrew/servicesnoch github.com/Homebrew/homebrew-services
Kangkyu
4
Dies funktioniert, nachdem initdb es erfolgreich ausgeführt wurde. Es scheitert sonst leise (aber scheint mit dem Service zeigt gearbeitet zu haben, wie es begann in brew services list.
Dmitri
1
Ich musste laufen brew services restart postgresql, da das Starten der Datenbank mit pg_ctl oder brew services start"ein anderer Server läuft möglicherweise" und das Stoppen der Datenbank mit pg_ctl hängen blieb.
Tomf
181

Ich hatte fast genau das gleiche Problem, und Sie haben den Befehl initdb als Fix angegeben. Dies war auch die Lösung für mich, aber ich habe nicht gesehen, dass jemand es hier gepostet hat, also für diejenigen, die danach suchen:

initdb /usr/local/var/postgres -E utf8
Yan
quelle
16
Das hat auch bei mir funktioniert. Initdb hat mir mitgeteilt, dass ich die Konfiguration bereits durchgeführt habe. Deshalb habe ich das gesamte Verzeichnis gelöscht: "rm -rf / usr / local / var / postgres" hat Ihren Befehl erneut ausgeführt und mein Server ist jetzt betriebsbereit. Vielen Dank, Sir!
Jorge Sampayo
5
Ja, ich musste rennen rm -rf /usr/local/var/postgresund dann funktionierte das für mich
Lee McAlilly
2
Das hat auch bei mir funktioniert. Vor initdb musste ich auch das postgres dir ( chown _your username on your comp_ usr/local/var/postgres) und dann initdb chown. Danach startet der Server automatisch beim Neustart (wenn Sie die Anweisungen von Homebrew befolgt haben) oder manuell pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
11.
2
Nach initdb(einschließlich Entfernen des alten Verzeichnisses, falls erforderlich), brew services start postgresqlfunktioniert
Dmitri
Wenn Sie die Idee haben, rm -rfalles, was sich derzeit in Ihrer Datenbank befindet, ein wenig zu erschrecken, anstatt es vollständig zu löschen, können Sie mv /usr/local/var/postgres /usr/local/var/postgres.backupes in ein neues Sicherungsverzeichnis verschieben und dann den Befehl ausführen, um die Datenbank erneut zu starten.
Hartley Brody
102

Wenn Ihr Computer abrupt neu gestartet wurde

Zuerst müssen Sie die Datei löschen. /usr/local/var/postgres/postmaster.pidAnschließend können Sie den Dienst abhängig von Ihrer Installation mit einer der vielen anderen genannten Methoden neu starten.

Sie können dies überprüfen, indem Sie in den Protokollen von Postgres nachsehen, was möglicherweise vor sich geht: tail -f /usr/local/var/postgres/server.log

rafaelportela
quelle
2
Sie können überprüfen tail -f /usr/local/var/postgres/server.log, ob Sie diese Datei löschen sollten. ref coderwall.com/p/zf-fww/…
user1448319
Meins war unter / Users / <Benutzer> / Library / Application \ Support / Postgres / var-9.6 / postmaster.pid
BatteryAcid
für Homebrew-Installationen ist der Pfad~/homebrew/var/postgres/postmaster.pid
blnc
2
Wow ... nur das hat bei mir funktioniert! Können Sie bitte eine detailliertere Erklärung geben, warum wir löschen sollten, postmaster.pidwenn der Computer abrupt neu gestartet wurde?
Adkl
1
Dies war wirklich nützlich
NinComPoop
81

Ein anderer Ansatz ist die Verwendung von Lunchy Gem (ein Wrapper für Launchctl):

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

So starten Sie postgres:

lunchy start postgres

So stoppen Sie Postgres:

lunchy stop postgres

Weitere Informationen finden Sie unter: " So installieren Sie PostgreSQL auf einem Mac mit Homebrew und Lunchy "

pisaruk
quelle
Abhängig davon, wie Sie Postgres einrichten, müssen Sie möglicherweise Postgresql anstelle von Postgres verwenden
Devon Kiss
72

Hier meine 2 Cent: Ich habe einen Alias ​​für postgres pg_ctl erstellt und in .bash_profile eingefügt (meine postgresql-Version ist 9.2.4 und der Datenbankpfad ist /Library/PostgreSQL/9.2/data).

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

Starten Sie ein neues Terminal.

Und dann? Sie können Ihren Postgresql-Server folgendermaßen starten / stoppen:

postgres.server start
postgres.server stop
Kenial
quelle
Die Angabe des Datenverzeichnisses mit -D ist hier der Schlüssel
Uhr
3
Ich bekam immer wieder "Bitte melden Sie sich an (z. B." su ") als (nicht privilegierter) Benutzer, dem der Serverprozess gehören wird." beim laufen nur sudo. +1
pyb
Vielen Dank. Die Vorschläge der Postgres-Tools zur Verwendung von su scheitern kläglich. sudo -u funktioniert hervorragend. (auf El Capitan)
Uchuugaka
33

Der mit Abstand sauberste Weg, um Postgres zu starten / zu stoppen / neu zu starten, wenn Sie es installiert haben, brewbesteht darin, einfach die mit der Installation gelieferte Startkonfigurationsdatei zu entladen und / oder zu laden:

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

Die erste Zeile stoppt postgres und die zweite Zeile startet es. Es müssen keine Datenverzeichnisse usw. angegeben werden, da sich alles in dieser Datei befindet.

Markus Amalthea Magnuson
quelle
funktioniert hervorragend für PostgreSQL 9.5.3, das unter OS X über Brew installiert wurde !! Vielen Dank!
Jpswain
Dies funktioniert wie ein Zauber, wenn der Postgres-Server nicht ordnungsgemäß heruntergefahren wird und keine eingehenden Verbindungen akzeptiert
Augusto Samamé Barrientos
5
Homebrew selbst verfügt über einfache Wrapper für diese Befehle, z. B.: brew services start postgres(Und Stop). Werfen Sie ein -vam Ende und Sie können sehen, was es tut.
Mark Edington
28

So starten Sie den Postgresql-Server:

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

So beenden Sie den Postgresql-Server:

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

Sie können auch einen Alias ​​über die CLI erstellen, um dies zu vereinfachen:

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'

Mit diesen können Sie einfach "pg-start" eingeben, um Postgres zu starten, und "pg-stop", um es herunterzufahren.

Todd
quelle
3
Ich habe eine Fehlermeldung, pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directorywie ich das beheben kann.
Rohman Masyhar
22

Zu Testzwecken halte ich die PostgreSQL-App für die beste Option!

Führen Sie eine App aus, und der Server ist betriebsbereit. Schließen Sie die App und der Server fällt aus.

http://postgresapp.com/

Crystian Leão
quelle
9

Wenn Sie postgresql mit homebrew installieren:

brew install postgres

Am Ende der Ausgabe sehen Sie folgende Methoden zum Starten des Servers:

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

Ich denke, das ist der beste Weg.

Sie können Ihrem .profile der Einfachheit halber einen Alias ​​hinzufügen.

jkaluzka
quelle
7

Für eine schnelle Einweg-Testdatenbank können Sie den Server im Vordergrund ausführen.

Initialisieren Sie eine neue Postgres-Datenbank in einem neuen Verzeichnis

mkdir db
initdb db -E utf8
createdb public

Starten Sie den Server im Vordergrund (Strg-C, um den Server zu stoppen)

postgres -d db

Stellen Sie in einer anderen Shell-Sitzung eine Verbindung zum Server her

psql -d public
k107
quelle
Dies scheint großartig zu sein, funktioniert aber bei mir nicht - es war nicht der Server, der bereits ausgeführt wurde, um den Schritt "createdb" auszuführen. Wenn ich versuche, den Serve zu starten, wird angezeigt, dass PGDATA oder die Konfigurationsdatei benötigt werden, die noch nicht vorhanden sind. Was vermisse ich?
szeitlin
7

Ich habe das gleiche Problem und führe alle Updates vom ersten Beitrag durch. Aber nach Prüfung der Protokolldatei:

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

Ich sehe wahre Ursache:

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

Nach Änderungsberechtigung für dieses Verzeichnis

chmod 0700 /usr/local/var/postgres

Der Postgres-Server wurde gestartet.

Überprüfen Sie die Protokolldatei jedes Mal.

Roosh
quelle
5

PostgreSQL ist in Server.app integriert und über den App Store in Mountain Lion erhältlich. Das bedeutet, dass es bereits konfiguriert ist und Sie es nur starten und dann Benutzer und Datenbanken erstellen müssen.

Tipp : Beginnen Sie nicht mit der Definition von $ PGDATA usw. Nehmen Sie die Dateispeicherorte unverändert.

Sie hätten diese Datei: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Anfangen:

sudo serveradmin start postgres

Prozess begann mit Argumenten:

/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 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

Sie können sudo:

sudo -u _postgres psql template1

Oder verbinden:

psql -h localhost -U _postgres postgres

Sie finden das Datenverzeichnis, die Version, den Ausführungsstatus usw. mit

sudo serveradmin fullstatus postgres  
Datasmid
quelle
Es konnte nicht viel anderes gefunden werden, das zeigte, wie man die eingebauten Postgres benutzt. Hat mir auch geholfen, den Befehl serveradmin zu finden. Vielen Dank
Jason S
Das Ausführen eines Dienstes als Root-Benutzer (sudo) ist definitiv keine gute Idee, sobald ein Sicherheitsproblem vorliegt, ist der gesamte Computer gefährdet.
Carlos Barcelona
Das postgresql wird nicht als root ausgeführt, sondern als _postgres.
bbaassssiiee
5

Variation dieser Antwort: 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
Substanzgenuss
quelle
Sie sollten der Antwort, auf die Sie sich beziehen, einen Link hinzufügen.
Jeffrey Bosboom
Dies war hilfreich, da meine Seite einwandfrei funktionierte und plötzlich nicht mehr funktionierte und den Ordner / var / postgres nicht finden konnte.
Shinesecret
Könnte jemand bitte kommentieren, warum dies der verknüpften Antwort überlegen ist? Wie ich gesehen habe, habe ich mich bereits beim letzten Mal, als ich ein ähnliches Problem hatte, positiv bewertet. Ich werde es verwenden, da hier kein Grund angegeben ist.
MCB
4

Für Entwicklungszwecke besteht eine der einfachsten Möglichkeiten darin, Postgres.app von der offiziellen Website zu installieren . Es kann über den Anwendungsordner oder mit den folgenden Befehlen im Terminal gestartet / gestoppt werden:

# start
open -a Postgres

# stop
killall Postgres
killall postgres
Melnosta
quelle
18
killallist wahrscheinlich nicht der beste Weg, um eine Datenbank zu stoppen.
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
quelle
4

Wenn Sie mit Brew installiert haben, sollte der folgende Befehl ausreichen.

brew services restart postgresql

Und dies funktioniert manchmal möglicherweise nicht. In diesem Fall sollten zwei Befehle auf jeden Fall funktionieren

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

pg_ctl -D /usr/local/var/postgres start
Shanu Khera
quelle
1

Keine der oben genannten Antworten hat das Problem für mich behoben, obwohl die gleichen Fehlermeldungen angezeigt wurden. Ich konnte meine Instanz wieder zum Laufen bringen, indem ich die vorhandene postmaster.pid-Datei löschte, die gesperrt war und keine Verbindungen zuließ.

Swedendrift
quelle
1

Verwenden Sie für Macports einfach den Befehl load / unload und den Portnamen des laufenden Servers:

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

Sie müssen sich also nicht merken, wo sich die /Library/LaunchDaemons/org.macports.postgresql96.plistDatei befindet

Steve
quelle
1

Wenn Sie Postgres mit dem EnterpriseDB-Installationsprogramm installiert haben, ist @Kenial der richtige Weg.

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

das hat bei mir funktioniert (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

oder zuerst cd /Library/PostgreSQL/9.6/bin/

Dmitry Evgrafoov
quelle
1

$ brew upgrade postgres

habe es für mich behoben.

Dadurch wird natürlich Ihre Postgres-Version aktualisiert und alle Abhängigkeiten aktualisiert / installiert.

WARNUNG: Tun Sie dies in dem Wissen, dass sich Ihre Postgresql-Version wahrscheinlich ändern wird. Für mich war das keine große Sache.

thedanotto
quelle
0

Für Mac / OSX mag ich LaunchRocket für diesen und andere Hintergrunddienste, die ich in der Entwicklung verwendet habe.

https://github.com/jimbojsb/launchrocket

Diese Seite enthält nette Anweisungen zur Installation: http://macappstore.org/launchrocket/

Dies gibt Ihnen einen schönen Bildschirm in Ihren Systemeinstellungen, auf dem Sie beim Anmelden starten, neu starten, rooten und starten können.

theUtherSide
quelle
0

Dies funktionierte jedes Mal für mich, inspiriert von Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools enthält pkill. Wenn Sie kein Gebräu haben: https://brew.sh/

Punnerud
quelle
0

Es gibt einen Randfall, der vielleicht für jemanden hilfreich sein wird:

Es besteht die Möglichkeit, dass postgres.pid mit einer PID gefüllt ist. Wenn Sie Ihren Computer jedoch neu starten und bevor der Postgress wieder zurück ist, wird diese PID von einem anderen Prozess verwendet. In diesem Fall werden Sie sowohl vom pg_ctl-Status als auch vom Brühdienst, der nach dem Postgres-Status gefragt wird, darüber informiert, dass der Status UP ist. Nur ps aux | grep und überprüfe, ob es wirklich postgress ist

Adam Piotrowski
quelle
0

Homebrew ist der Weg !!

So starten Sie den Dienst:

brew services start postgresql   

Um es aufzulisten:

brew services list |grep postgres

um den Dienst zu stoppen.:

brew services stop postgresql 
Muhammad Dyas Yaskur
quelle
0

Wenn Sie es nicht mit Brew und direkt vom Mac-Paket installiert haben, funktionierte dies für mich für PostgreSQL 12, wenn alle Standardspeicherorte, -variablen usw. verwendet wurden.

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

Ich hatte das gleiche Problem. Versuchte alle diese Lösungen, aber keine funktionierte.

Endlich gelang es, es zum Laufen zu bringen, indem postgres HOST in den Django-Einstellungen von localhostauf geändert wurde 127.0.0.1.

Prost, wenn es hilft.

Tazeem
quelle