Come avviare il server PostgreSQL su Mac OS X?


989

AGGIORNAMENTO FINALE:

Mi ero dimenticato di eseguire il initdbcomando.

</ AGGIORNAMENTO FINALE>

eseguendo questo comando

ps auxwww | grep postgres

Vedo che Postgres non è in esecuzione

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

questo solleva la domanda: come posso avviare il server postgresql?

aggiornare:

>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

aggiornamento 2:

Il tocco non ha avuto successo, quindi l'ho fatto invece:

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

Ma quando provo ad avviare il server rails, vedo ancora questo:

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

aggiornamento 3:

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

aggiornamento 4:

Ho scoperto che NON C'ERA NO pg_hba.conf (solo pg_hba.conf.sample), quindi ho modificato il campione e lo ho rinominato (per rimuovere il .sample). Ecco i contenuti:

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

ma non lo capisco:

> 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

anche:

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

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

aggiornamento 6:

questo sembra strano:

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

tuttavia, ho fatto questo:

>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

quindi ho fatto questo:

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

quindi ho provato questo:

> 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 

sempre ottenendo lo stesso "Il server è in esecuzione?" Messaggio.


Come hai installato Postgres? Hai usato un gestore di pacchetti o un'installazione manuale?
James Allman,

1
non ricordo esattamente ma era già installato o ho eseguito "brew install postgres". Mi spingerei verso quest'ultimo, ma di nuovo, non ne sono sicuro al 100%.
Ramy,

Usa sudo, cioèsudo pg_ctl...
Boemo

54
Ho votato a favore solo perché l'AGGIORNAMENTO FINALE mi ha fatto ridere molto! : D
pkoch,

14
Ho dovuto votare, vengo qui almeno 3 volte a settimana per copiare il primissimo comando pg_ctl per riavviare psql dopo un'interruzione imprevista .. eh, devo impararlo: D Grazie amico!
lucygenik,

Risposte:


1848

Il gestore di pacchetti Homebrew include le pianificazioni di avvio per l'avvio automatico. Per ulteriori informazioni, esegui brew info postgres.

Inizia manualmente:

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

Ferma manualmente:

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

Inizia automaticamente:

"Per avviare launchd avviare subito postgresql e riavviare all'accesso:"

brew services start postgresql


Qual è il risultato di pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Qual è il risultato di pg_ctl -D /usr/local/var/postgres status?

Ci sono messaggi di errore in server.log?

Assicurarsi che le connessioni localhost tcp siano abilitate in pg_hba.conf:

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

Controlla Listen_addresses e la porta 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)

Pulire

Molto probabilmente Postgres è stato installato tramite Homebrew , Fink , MacPorts o il programma di installazione di EnterpriseDB .

Controllare l'output dei seguenti comandi per determinare con quale gestore pacchetti è stato installato:

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

1
@Ramy Il tocco è riuscito? Controlla l'esistenza e le autorizzazioni di / usr / local / var / postgres e server.log . Dovrebbe essere rw per il tuo userid.
James Allman,

1
@Ramy: puoi inserire qualche informazione in /usr/local/var/postgres/server.log? L'installazione potrebbe essere corrotta e potrebbe essere più veloce ripulire e reinstallare utilizzando una fonte nota come Homebrew.
James Allman,

10
Perché tutto ciò è necessario? Perché non puoi semplicemente avviare Postgres nel modo in cui inizi il nodo?
Kinnard Hockenhull,

32
che comando ridicolmente complicato solo per avviare e interrompere il programma
ahnbizcad,

3
Funziona ancora ma è un po 'obsoleto. La risposta di seguito brew services start postgresqlè una risposta più aggiornata e semplice.
mthorley,

373

Se vuoi avviare e arrestare manualmente postgresql (installato tramite homebrew), il modo più semplice è:

brew services start postgresql

e

brew services stop postgresql

Se si dispone di una versione specifica, assicurarsi di aggiungere il suffisso alla versione, ad esempio:

brew services start postgresql@10

7
Vorrei saperlo brew servicesprima ... questa è l'unica soluzione che funziona per me. <3 grazie!
seanlinsley,

5
brew tap gapple/servicesfarà funzionare di nuovo il comando dei servizi di produzione della birra
Fabian Leutgeb,

4
Sembra brew tap homebrew/servicesancora funzionante github.com/Homebrew/homebrew-services
kangkyu

4
Funziona dopo che initdb è stato eseguito correttamente. In caso contrario, non riesce in silenzio (ma sembra di aver lavorato, con la proiezione di servizio, come ha iniziato a brew services list.
Dmitri

1
Ho dovuto correre brew services restart postgresql, da quando ho avviato il db con pg_ctl o brew services startho detto "potrebbe essere in esecuzione un altro server" e ho bloccato il db con pg_ctl.
tomf

181

Ho avuto quasi lo stesso identico problema e tu hai citato il comando initdb come soluzione. Questa è stata anche la soluzione per me, ma non ho visto che nessuno l'ha pubblicato qui, quindi per chi lo sta cercando:

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

16
questo ha funzionato anche per me, initdb mi ha detto che avevo già fatto la configurazione, quindi ho eliminato l'intera directory: "rm -rf / usr / local / var / postgres" ha eseguito nuovamente il tuo comando e il mio server ora si avvia e funziona, molte grazie signore!
Jorge Sampayo,

5
sì, dovevo correre rm -rf /usr/local/var/postgrese poi questo ha funzionato per me
Lee McAlilly,

2
Questo è ciò che ha funzionato anche per me. Prima di initdb, dovevo anche chown il postgres dir ( chown _your username on your comp_ usr/local/var/postgres), quindi initdb. Successivamente il server si avvia automaticamente al riavvio (se hai seguito le istruzioni di Homebrew per questo) o manualmente pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
settembre

2
Dopo initdb(inclusa la rimozione della vecchia directory, se necessario), brew services start postgresqlfunziona
Dmitri,

Se l'idea di rm -rfinserire tutto ciò che è attualmente nel tuo database ti spaventa un po ', invece di eliminarlo del tutto, potresti usare qualcosa di simile mv /usr/local/var/postgres /usr/local/var/postgres.backupper spostarlo in una nuova directory di backup, quindi eseguire il comando per riavviare il database.
Hartley Brody,

102

Se il computer è stato riavviato bruscamente

Innanzitutto, è necessario eliminare il file /usr/local/var/postgres/postmaster.pidQuindi è possibile riavviare il servizio utilizzando uno dei molti altri metodi citati a seconda dell'installazione.

Puoi verificarlo guardando i registri di Postgres per vedere cosa potrebbe succedere: tail -f /usr/local/var/postgres/server.log


2
Puoi verificare tail -f /usr/local/var/postgres/server.logse devi eliminare quel file. ref coderwall.com/p/zf-fww/…
user1448319

Il mio era sotto / Users / <utente> / Libreria / Applicazione \ Supporto / Postgres / var-9.6 / postmaster.pid
BatteryAcid

per le installazioni homebrew il percorso è~/homebrew/var/postgres/postmaster.pid
blnc il

2
Wow ... solo questo ha funzionato per me! Potete per favore dare una spiegazione più dettagliata del motivo per cui dovremmo eliminare postmaster.pidse il computer è stato riavviato bruscamente?
adkl

1
Questo è stato davvero utile
NinComPoop l'

81

Un altro approccio sta usando la gemma lunchy (un wrapper per launchctl):

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

Per avviare Postgres:

lunchy start postgres

Per interrompere Postgres:

lunchy stop postgres

Per ulteriori informazioni consultare: " Come installare PostgreSQL su un Mac con Homebrew e Lunchy "


a seconda di come imposti postgres potresti dover usare postgresql invece di postgres
Devon Kiss,

72

Ecco i miei 2 centesimi: ho creato un alias per postgres pg_ctl e l'ho inserito in .bash_profile (la mia versione postgresql è 9.2.4 e il percorso del database è /Library/PostgreSQL/9.2/data).

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

Avvia nuovo terminale.

E poi? Puoi avviare / arrestare il tuo server postgresql con questo:

postgres.server start
postgres.server stop

Specificare la directory di dati con -D è la chiave qui
olore

3
Continuavo a ricevere "Per favore accedi (usando, ad esempio," su ") come utente (senza privilegi) che sarà proprietario del processo del server." quando si esegue solo sudo. +1
pyb

Grazie. I suggerimenti degli strumenti di postgres di usare su falliscono miseramente. sudo -u funziona alla grande. (su El Capitan)
Uchuugaka

33

Il modo più pulito di gran lunga di start / stop / postgres riavvio se è stato installato attraverso brewsta per scaricare in modo semplice e / o caricare il file di configurazione di launchd che viene fornito con l'installazione:

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

La prima riga interromperà Postgres e la seconda riga la avvierà. Non è necessario specificare alcuna directory di dati ecc. Poiché tutto è contenuto in quel file.


funziona alla grande per PostgreSQL 9.5.3 installato su OS X tramite Brew !! Grazie!
jpswain,

funziona come un incantesimo quando il server Postgres non si spegne correttamente e non accetta connessioni in entrata
Augusto Samamé Barrientos

5
Lo stesso Homebrew ha dei semplici wrapper per questi comandi, ad esempio: brew services start postgres(e stop). Getta un -valla fine e puoi vedere cosa sta facendo.
Mark Edington,

28

Per avviare il server postgresql:

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

per terminare il server postgresql:

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

Puoi anche creare un alias tramite l'interfaccia della riga di comando per semplificare:

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'

Con questi puoi semplicemente digitare "pg-start" per avviare Postgres e "pg-stop" per spegnerlo.


3
Ho ricevuto un errore su pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directorycome risolvere questo problema?
Rohman Masyhar,


9

quando installi postgresql usando homebrew:

brew install postgres

alla fine dell'output vedrai questi metodi per avviare il server:

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

Penso che questo sia il modo migliore.

Puoi aggiungere alias nel tuo .profile per comodità.


7

Per un database di test monouso rapido è possibile eseguire il server in primo piano.

Inizializza un nuovo database postgres in una nuova directory

mkdir db
initdb db -E utf8
createdb public

Avvia il server in primo piano (ctrl-C per arrestare il server)

postgres -d db

In un'altra sessione della shell, connettersi al server

psql -d public

Questo sembra fantastico, ma non funziona per me - non era il server già in esecuzione per fare il passo creato. Quando provo ad avviare il servizio, dice che ha bisogno del PGDATA o del file di configurazione, che non esiste ancora. Cosa mi sto perdendo?
szeitlin,

7

Ho lo stesso problema ed eseguo tutti gli aggiornamenti dal primo post. Ma dopo il controllo del file di registro:

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

Vedo la vera causa:

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

Dopo il permesso di modifica su questa directory

chmod 0700 /usr/local/var/postgres

il server Postgres è stato avviato.

Controlla sempre il file di registro.


5

PostgreSQL è integrato in Server.app disponibile tramite l'App Store di Mountain Lion. Ciò significa che è già configurato e devi solo avviarlo, quindi creare utenti e database.

Suggerimento : non iniziare con la definizione di $ PGDATA e così via, prendere le posizioni dei file così come sono.

Si avrebbe questo file: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Iniziare:

sudo serveradmin start postgres

Il processo è iniziato con argomenti:

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

Puoi sudo:

sudo -u _postgres psql template1

Oppure connettiti:

psql -h localhost -U _postgres postgres

È possibile trovare la directory dei dati, la versione, lo stato di esecuzione e così via

sudo serveradmin fullstatus postgres  

Non è stato possibile trovare molto altro che mostrava come utilizzare Postgres integrato. Mi ha aiutato a trovare anche il comando serveradmin. Grazie
Jason S,

L'esecuzione di un servizio come utente root (sudo) non è sicuramente una buona idea, non appena si verifica un problema di sicurezza, l'intero computer viene compromesso.
Carlos Barcelona,

Postgresql non funziona come root, ma come _postgres.
bbaassssiiee,

5

Variazione su questa risposta: 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

È necessario aggiungere un collegamento alla risposta a cui si fa riferimento.
Jeffrey Bosboom,

Questo è stato utile perché il mio pg stava funzionando bene e all'improvviso ha smesso di funzionare e non è stato possibile trovare la cartella / var / postgres.
shinesecret

Qualcuno potrebbe commentare il motivo per cui questo è superiore alla risposta collegata? Come ho visto, ho già effettuato l'upgrade dall'ultima volta in cui ho avuto un problema simile, lo userò perché non c'è motivo indicato qui.
MCB

4

Ai fini dello sviluppo, uno dei modi più semplici è installare Postgres.app dal sito ufficiale . Può essere avviato / arrestato dalla cartella Applicazioni o utilizzando i seguenti comandi nel terminale:

# start
open -a Postgres

# stop
killall Postgres
killall postgres

18
killallprobabilmente non è il modo migliore per arrestare un database.
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

Se hai installato usando brew, il comando seguente dovrebbe essere sufficiente.

brew services restart postgresql

E questo a volte potrebbe non funzionare, in questo caso due comandi dovrebbero sicuramente funzionare

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

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

1

nessuna delle risposte sopra ha risolto il problema per me nonostante avessi gli stessi messaggi di errore. Sono stato in grado di ripristinare il funzionamento della mia istanza eliminando il file postmaster.pid esistente che era bloccato e non consentivo le connessioni.


1

Per macports, basta usare il comando load / unload e il nome della porta del server in esecuzione:

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

quindi non devi ricordare dove /Library/LaunchDaemons/org.macports.postgresql96.plistsi trova il file



1

Se hai installato Postgres usando il programma di installazione EnterpriseDB, ciò che @Kenial ha suggerito è la strada da percorrere.

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

1

che ha funzionato per me (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

o prima cd /Library/PostgreSQL/9.6/bin/


1

$ brew upgrade postgres

riparato per me.

Ciò, ovviamente, aggiornerà la versione di Postgres e aggiornerà / installerà eventuali dipendenze.

ATTENZIONE: fai questo sapendo che la tua versione postgresql probabilmente cambierà. Per me, non è stato un grosso problema.



0

Questo ha funzionato per me ogni volta, ispirato a Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools include pkill. Se non hai Brew: https://brew.sh/



0

C'è qualche caso limite che forse sarà utile per qualcuno:

C'è un'opzione, che avrai postgres.pid riempito con un po 'di PID. Ma se riavvii la macchina e prima che postgress torni di nuovo, qualche altro processo prenderà quel PID. In tal caso, sia lo stato di pg_ctl che il servizio di erogazione della birra hanno chiesto informazioni sullo stato di Postgres, indicheranno che è attivo. Solo ps aux | grep e controlla se è davvero postgresso


0

L'homebrew è la strada !!

Per avviare il servizio:

brew services start postgresql   

Per elencarlo:

brew services list |grep postgres

per interrompere il servizio .:

brew services stop postgresql 

0

Se non lo hai installato con brew e direttamente dal pacchetto mac, questo ha funzionato per me per PostgreSQL 12 quando utilizzavo tutti i percorsi predefiniti, le variabili, ecc.

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

0

Stavo affrontando lo stesso problema. Ho provato tutte queste soluzioni ma nessuna ha funzionato.

Finalmente sono riuscito a farlo funzionare cambiando postgres HOST nelle impostazioni di Django da localhosta127.0.0.1 .

Saluti se aiuta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.