¿Cómo iniciar el servidor PostgreSQL en Mac OS X?

989

ACTUALIZACIÓN FINAL:

Había olvidado ejecutar el initdbcomando.

</ ACTUALIZACIÓN FINAL>

ejecutando este comando

ps auxwww | grep postgres

Veo que postgres no se está ejecutando

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

esto plantea la pregunta: ¿Cómo inicio el servidor postgresql?

actualizar:

>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

actualización 2:

El toque no fue exitoso, así que hice esto en su lugar:

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

Pero cuando intento iniciar el servidor de rails, todavía veo esto:

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

actualización 3:

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

actualización 4:

Descubrí que NO HABÍA pg_hba.conf (solo pg_hba.conf.sample), así que modifiqué la muestra y le cambié el nombre (para eliminar el .sample). Aquí están los contenidos:

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

pero no entiendo esto:

> 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

además:

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

actualización 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.

actualización 6:

esto parece extraño:

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

sin embargo, hice esto:

>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

entonces hice esto:

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

así que probé esto:

> 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 

sigue obteniendo lo mismo "¿Se está ejecutando el servidor?" mensaje.

Ramy
fuente
¿Cómo instalaste Postgres? ¿Usó un administrador de paquetes o una instalación manual?
James Allman el
1
no recuerdo exactamente pero ya estaba instalado o ejecuté "brew install postgres". Me inclinaría hacia lo último, pero de nuevo, no estoy 100% seguro.
Ramy
Uso sudo, es decirsudo pg_ctl...
bohemio
54
¡He votado a favor solo porque la ACTUALIZACIÓN FINAL me hizo reír mucho! : D
pkoch
14
Tuve que votar, vengo aquí al menos 3 veces por semana para copiar el primer comando pg_ctl para reiniciar psql después de una terminación inesperada ... heh tengo que aprenderlo: D ¡Gracias amigo!
lucygenik

Respuestas:

1848

El administrador de paquetes Homebrew incluye listas de inicio para iniciar automáticamente. Para más información ejecutar brew info postgres.

Comience manualmente:

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

Parar manualmente:

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

Comience automáticamente:

"Para iniciar, inicie postgresql ahora y reinicie al iniciar sesión:"

brew services start postgresql


¿Cuál es el resultado de pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

¿Cuál es el resultado de pg_ctl -D /usr/local/var/postgres status ?

¿Hay algún mensaje de error en el server.log?

Asegúrese de que las conexiones tcp localhost estén habilitadas en pg_hba.conf:

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

Verifique listen_addresses y el puerto en 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)

Limpiar

Postgres probablemente se instaló a través de Homebrew , Fink , MacPorts o el instalador EnterpriseDB .

Verifique el resultado de los siguientes comandos para determinar con qué administrador de paquetes se instaló:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
James Allman
fuente
1
@Ramy ¿Tuvo éxito el toque? Verifique la existencia y los permisos de / usr / local / var / postgres y server.log . Debe ser rw para su ID de usuario.
James Allman el
1
@Ramy: ¿Puede incluir alguna información en /usr/local/var/postgres/server.log? Su instalación puede estar dañada y puede ser más rápido limpiar y reinstalar usando una fuente conocida como Homebrew.
James Allman el
10
¿Por qué es todo esto necesario? ¿Por qué no puede simplemente iniciar postgres de la misma manera que inicia el nodo?
Kinnard Hockenhull
32
qué comando ridículamente complicado para iniciar y detener el programa
ahnbizcad
3
Esto todavía funciona pero está un poco desactualizado. La respuesta a continuación brew services start postgresqles una respuesta más actualizada y directa.
mthorley
373

Si desea iniciar y detener manualmente postgresql (instalado a través de homebrew), la forma más fácil es:

brew services start postgresql

y

brew services stop postgresql

Si tiene una versión específica, asegúrese de sufijar la versión, por ejemplo:

brew services start postgresql@10
malopezcruz
fuente
77
Ojalá supiera brew servicesantes ... esta es la única solución que me funciona. <3 gracias!
seanlinsley
55
brew tap gapple/serviceshará que el comando de servicios de preparación vuelva a funcionar
Fabian Leutgeb
44
Parece que brew tap homebrew/servicestodavía funciona github.com/Homebrew/homebrew-services
kangkyu
44
Esto funciona después de que initdb se haya ejecutado con éxito. De lo contrario, falla silenciosamente (pero parece haber funcionado, y el servicio se muestra como iniciado en brew services list.)
Dmitri
1
Necesitaba ejecutar brew services restart postgresql, ya que comencé el db con pg_ctl o brew services startdije "podría estar ejecutándose otro servidor" y detuve el db con pg_ctl colgado.
tomf
181

Tuve casi el mismo problema, y ​​usted citó el comando initdb como la solución. Esta también fue la solución para mí, pero no vi que nadie lo publicara aquí, así que para aquellos que lo están buscando:

initdb /usr/local/var/postgres -E utf8
Yan
fuente
16
esto también funcionó para mí, initdb me dijo que ya había hecho la configuración, así que eliminé todo el directorio: "rm -rf / usr / local / var / postgres" ejecutó nuevamente su comando y mi servidor ahora se pone en funcionamiento, muchas gracias señor!
Jorge Sampayo
55
sí, tuve que correr rm -rf /usr/local/var/postgresy esto funcionó para mí
Lee McAlilly
2
Esto es lo que funcionó para mí también. Antes de initdb, también tenía que crear el directorio postgres ( chown _your username on your comp_ usr/local/var/postgres), luego initdb. Después de eso, el servidor se inicia automáticamente cuando reinicia (si siguió las instrucciones de Homebrew para eso) o manualmente pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
septerr
2
Después initdb(incluida la eliminación del directorio anterior si es necesario), brew services start postgresqlfunciona
Dmitri
Si la idea de rm -rfincluir todo lo que está actualmente en su base de datos lo asusta un poco, en lugar de eliminarlo por completo, puede usar algo como mv /usr/local/var/postgres /usr/local/var/postgres.backupmoverlo a un nuevo directorio de respaldo y luego ejecutar el comando para que la base de datos comience nuevamente.
Hartley Brody
102

Si su computadora se reinició abruptamente

Primero, debes eliminar el archivo /usr/local/var/postgres/postmaster.pid Luego, puede reiniciar el servicio utilizando uno de los muchos otros métodos mencionados, dependiendo de su instalación.

Puede verificar esto mirando los registros de Postgres para ver qué podría estar pasando: tail -f /usr/local/var/postgres/server.log

rafaelportela
fuente
2
Puede verificar tail -f /usr/local/var/postgres/server.logsi debe eliminar ese archivo. ref coderwall.com/p/zf-fww/…
user1448319
La mía estaba en / Users / <user> / Library / Application \ Support / Postgres / var-9.6 / postmaster.pid
BatteryAcid el
para homebrew instala la ruta es~/homebrew/var/postgres/postmaster.pid
blnc
2
Wow ... solo esto funcionó para mí! ¿Puede dar una explicación más detallada de por qué deberíamos eliminar postmaster.pidsi la computadora se reinicia abruptamente?
adkl
1
Esto fue realmente útil
NinComPoop
81

Otro enfoque es usar gemy lunchy (un contenedor para launchctl):

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

Para iniciar postgres:

lunchy start postgres

Para detener postgres:

lunchy stop postgres

Para obtener más información, consulte: " Cómo instalar PostgreSQL en una Mac con Homebrew y Lunchy "

pisaruk
fuente
dependiendo de cómo configure postgres, es posible que necesite usar postgresql en lugar de postgres
Devon Kiss
72

Aquí mis 2 centavos: hice un alias para postgres pg_ctl y lo puse en .bash_profile (mi versión de postgresql es 9.2.4, y la ruta de la base de datos es /Library/PostgreSQL/9.2/data).

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

Lanzar nueva terminal.

¿Y entonces? Puede iniciar / detener su servidor postgresql con esto:

postgres.server start
postgres.server stop
Kenial
fuente
La clave aquí es especificar el directorio de datos con -D
antes del
3
Seguía recibiendo "Inicie sesión (usando, por ejemplo," su ") como el usuario (sin privilegios) que será el propietario del proceso del servidor". cuando se ejecuta solo sudo. +1
pyb
Gracias. Las sugerencias de las herramientas de postgres para usar su fallan miserablemente. sudo -u funciona de manera brillante. (en El Capitan)
uchuugaka
33

La manera más limpia , con mucho, para iniciar / detener / postgres reinicio si ha instalado a través de brewestá simplemente para descargar y / o cargar el archivo de configuración launchd que viene con la instalación:

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

La primera línea detendrá postgres y la segunda línea lo iniciará. No es necesario especificar ningún directorio de datos, etc., ya que todo está en ese archivo.

Markus Amalthea Magnuson
fuente
¡Funciona muy bien para PostgreSQL 9.5.3 instalado en OS X a través de Brew! ¡Gracias!
jpswain
esto funciona de maravilla cuando el servidor postgres no se cierra correctamente y no acepta conexiones entrantes
Augusto Samamé Barrientos
55
Homebrew en sí tiene envoltorios simples para estos comandos, por ejemplo: brew services start postgres(y detener). Tira un -vfinal y podrás ver lo que está haciendo.
Mark Edington
28

Para iniciar el servidor postgresql:

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

para finalizar el servidor postgresql:

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

También puede crear un alias a través de CLI para que sea más fácil:

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 estos puede simplemente escribir "pg-start" para iniciar Postgres y "pg-stop" para cerrarlo.

Todd
fuente
3
Tengo un error, pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directory¿cómo solucionar esto?
Rohman Masyhar
22

¡Para fines de prueba, creo que la aplicación PostgreSQL es la mejor opción!

Ejecute una aplicación y el servidor estará en funcionamiento. Cierra la aplicación y el servidor se cae.

http://postgresapp.com/

Crystian Leão
fuente
9

cuando instalas postgresql usando homebrew:

brew install postgres

Al final de la salida verá estos métodos para iniciar el servidor:

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

Creo que esta es la mejor manera.

Puede agregar alias a su .profile para mayor comodidad.

jkaluzka
fuente
7

Para una base de datos de prueba desechable rápida, puede ejecutar el servidor en primer plano.

Inicializar una nueva base de datos postgres en un nuevo directorio

mkdir db
initdb db -E utf8
createdb public

Inicie el servidor en primer plano (ctrl-C para detener el servidor)

postgres -d db

En otra sesión de shell, conéctese al servidor

psql -d public
k107
fuente
Esto parece genial, pero no funciona para mí: no era el servidor que ya se estaba ejecutando para realizar el paso createdb. Cuando intento iniciar el servicio, dice que necesita el archivo PGDATA o config, que aún no existe. ¿Qué me estoy perdiendo?
szeitlin
7

Tengo el mismo problema y realizo todas las actualizaciones desde la primera publicación. Pero después de comprobar el archivo de registro:

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

Veo la verdadera causa:

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

Después de cambiar el permiso en este directorio

chmod 0700 /usr/local/var/postgres

El servidor postgres tiene inicio.

Cada vez verifique el archivo de registro.

Roosh
fuente
5

PostgreSQL está integrado en Server.app disponible a través de App Store en Mountain Lion. Eso significa que ya está configurado, y solo necesita iniciarlo y luego crear usuarios y bases de datos.

Propina : No comience con la definición de $ PGDATA, etc., tome las ubicaciones de los archivos tal como están.

Tendría este archivo: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Para comenzar:

sudo serveradmin start postgres

El proceso comenzó con argumentos:

/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_soper_group_ _ _ _ _ _ _ _ _ _ _ _ = grupo_socket_grupo = _

Puedes sudo:

sudo -u _postgres psql template1

O conectar:

psql -h localhost -U _postgres postgres

Puede encontrar el directorio de datos, la versión, el estado de ejecución, etc. con

sudo serveradmin fullstatus postgres  
datasmid
fuente
No pude encontrar mucho más que mostrara cómo usar el construido en Postgres. Me ayudó a encontrar el comando serveradmin también. Gracias
Jason S
Ejecutar un servicio como usuario root (sudo) definitivamente no es una buena idea, tan pronto como hay un problema de seguridad, toda la computadora se ve comprometida.
Carlos Barcelona
El postgresql no se ejecuta como root, sino como _postgres.
bbaassssiiee
5

Variación sobre esta respuesta: 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
alegría
fuente
Debe agregar un enlace a la respuesta a la que se refiere.
Jeffrey Bosboom
Esto fue útil ya que mi página estaba funcionando bien y de repente dejó de funcionar y no pudo encontrar la carpeta / var / postgres.
shinesecret
¿Podría alguien comentar por qué esto es superior a la respuesta vinculada? Como vi, ya voté desde la última vez que tuve un problema similar, lo voy a usar ya que no hay ninguna razón dada aquí.
MCB
4

Para fines de desarrollo, una de las formas más simples es instalar Postgres.app desde el sitio oficial . Se puede iniciar / detener desde la carpeta de aplicaciones o utilizando los siguientes comandos en la terminal:

# start
open -a Postgres

# stop
killall Postgres
killall postgres
Melnosta
fuente
18
killallProbablemente no sea la mejor manera de detener una base de datos.
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
fuente
4

Si ha instalado usando brew, el siguiente comando debería ser suficiente.

brew services restart postgresql

Y esto a veces puede no funcionar, en ese caso debajo de dos comandos definitivamente deberían funcionar

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

pg_ctl -D /usr/local/var/postgres start
shanu khera
fuente
1

ninguna de las respuestas anteriores solucionó el problema para mí a pesar de recibir los mismos mensajes de error. Pude volver a poner en funcionamiento mi instancia al eliminar el archivo postmaster.pid existente que estaba bloqueado y no permitir conexiones.

Swedendrift
fuente
1

Para macports, solo use el comando cargar / descargar y el nombre del puerto del servidor en ejecución:

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

para que no tenga que recordar dónde /Library/LaunchDaemons/org.macports.postgresql96.plistse encuentra el archivo

Steve
fuente
1

Si instaló Postgres usando el instalador EnterpriseDB, entonces lo que @Kenial sugirió es el camino a seguir.

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

eso funcionó para mí (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

o primero cd /Library/PostgreSQL/9.6/bin/

Dmitry Evgrafoov
fuente
1

$ brew upgrade postgres

Me lo arregló.

Eso, por supuesto, actualizará su versión de postgres y actualizará / instalará cualquier dependencia.

ADVERTENCIA: haga esto sabiendo que su versión postgresql probablemente cambiará. Para mí, eso no fue un gran problema.

thedanotto
fuente
0

Para Mac / OSX, me gusta mucho LaunchRocket para este y otros servicios en segundo plano que utilicé en el desarrollo.

https://github.com/jimbojsb/launchrocket

Este sitio tiene buenas instrucciones sobre la instalación: http://macappstore.org/launchrocket/

Esto le brinda una buena pantalla en las Preferencias del sistema que le permite iniciar, reiniciar, rootear, iniciar al iniciar sesión.

el otro lado
fuente
0

Esto funcionó para mí cada vez, inspirado por Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools incluye pkill. Si no tiene Brew: https://brew.sh/

Punnerud
fuente
0

Hay algunos casos extremos que tal vez sean útiles para alguien:

Hay una opción, que tendrá postgres.pid lleno de algún PID. Pero si reinicia su máquina, y antes de que Postgress vuelva nuevamente, algún otro proceso tomará ese PID. Si eso sucede, tanto el estado de pg_ctl como el servicio de preparación de la cerveza que se le preguntó sobre el estado de postgres, le indicarán que está ARRIBA. Solo ps aux | grep y verifica si realmente es postgreso

Adam Piotrowski
fuente
0

¡Homebrew es el camino!

Para iniciar el servicio:

brew services start postgresql   

Para enumerarlo:

brew services list |grep postgres

para detener el servicio .:

brew services stop postgresql 
Muhammad Dyas Yaskur
fuente
0

Si no lo instaló con brew y directamente desde el paquete mac, esto funcionó para mí para PostgreSQL 12 al usar todas las ubicaciones predeterminadas, variables, etc.

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

Estaba enfrentando el mismo problema. Intenté todas estas soluciones pero ninguna funcionó.

Finalmente logré hacerlo funcionar cambiando postgres HOST en la configuración de Django de localhosta 127.0.0.1.

Saludos si ayuda.

Tazeem
fuente