Acabo de reinstalar postgres a través de brew install postgres
Corrí initdb /usr/local/var/postgres -E utf8
pero obtuve esto:
The files belonging to this database system will be owned by user "atal421".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".
initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".
entonces, yo rm -rf
la carpeta postgres y la ejecuté nuevamente:
initdb /usr/local/var/postgres -E utf8
decía que todo estaba bien:
Success. You can now start the database server using:
postgres -D /usr/local/var/postgres
entonces, ejecuté ese comando y obtuve:
postgres -D /usr/local/var/postgres
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 13731) running in data directory "/usr/local/var/postgres"?
Ahora, cuando miro mi Monitor de actividad, puedo ver 6 instancias de postgreso.
¿Cómo puedo solucionar esto?
postgres
con un administrador de correo y cinco servidores de servicios públicos. PostgreSQL es una arquitectura multiproceso.Respuestas:
Anuncio de servicio público: nunca eliminar
postmaster.pid
. De Verdad. Gran manera de obtener corrupción de datos.Ya tenía instalado PostgreSQL y eliminó el directorio de datos sin detener el servidor en ejecución. Entonces, ahora tiene algunos procesos huérfanos del servidor PostgreSQL que administran archivos de datos que se han eliminado, por lo que ya no son accesibles en el sistema de archivos y se eliminarán por completo cuando se cierre el último identificador de archivo abierto. No puede usarlo
pg_ctl
para apagar el servidor normalmente porque ha eliminado el clúster de datos, por lo que simplemente debe eliminar los procesos. Mata al administrador de correos (no lo useskill -9
, solo una matanza ordinaria lo hará) y el resto también se cerrará.Entonces podrá iniciar un nuevo servidor en el datadir contra los
initdb
datos recién actualizados .Es muy probable que experimente conflictos en el camino a menos que desinstale la otra versión anterior de PostgreSQL.
En una palabra:
cat /usr/local/var/postgres/postmaster.pid
Anote el número en la primera línea, que es el pid del administrador de correo.
Verifique con
ps
eso que el pid es el de un postmaster postgres.Elimine el proceso de administrador de correo con el siguiente comando, reemplazando 'PID' con el número que anotó. Nuevamente, no use
kill -9
okill -KILL
simplemente use un simplekill
, es decir, unSIGTERM
:kill PID
Si el pid no es el de un administrador de correo de postgres, manualmente
kill
cualquierpostgres
back-end que todavía se esté ejecutando, verifique que ya no se esté ejecutando y solo luego elimínelopostmaster.pid
. (También debe verificar quepostmaster.pid
no esté en el almacenamiento compartido donde el servidor podría estar ejecutándose en alguna otra VM / host).fuente
kill PID
no funcionó para mí. Que necesitabakill -3 PID
. En mi caso, hice un apagado que pudo haber matado las ventanas de terminal sin detener los procesos correctamente. Elkill -3 PID
mató el proceso y sus hijos con éxito me permitieron comenzar postgres nuevamente.Otra posibilidad es que haya tenido un apagado forzado y el proceso de postgres haya muerto sin limpiar su archivo pid. Esto me sucede cuando la batería de mi computadora portátil se agota.
Esta solución no es para un sistema de producción, y realmente debería asegurarse de que el demonio postgres no se esté ejecutando , pero uso mi computadora portátil para la codificación y no me preocupa la necesidad de regenerar mis bases de datos.
Entonces, si otro proceso, o ninguno, se está ejecutando en ese puerto, simplemente elimine el archivo pid, por ejemplo
y los postgres pronto comenzarán bien.
Para saber si se está ejecutando otro proceso en ese puerto, puede hacer
Entonces corre
para ver si funcionó. Debería ver
(o al menos eso es lo que acabo de ver después de hacer lo anterior :-))
(Y realmente, ¿no debería Postgres ser lo suficientemente inteligente como para darse cuenta de que no hay un proceso con PID 933 y eliminar el archivo pid falso por sí solo?)
fuente
postmaster.pid
que apuntaba el archivo. Esto fue varios días después de un apagado inmundo (instalación portátil de Postgres en OSX a través de homebrew).rm postmaster.pid
funcionó para mí. No veo ninguna corrupción de datos (pero en cualquier caso, esto es solo una máquina de desarrollo).~/Library/Application Support/Postgres/data/postmaster.pid
, estaba funcionando nuevamente.Intenté todo esto en vano después de actualizar a Yosemite rompió mis postgres (instalados a través de homebrew).
Luego me topé con esta publicación de blog: http://ruckus.tumblr.com/post/100355276496/yosemite-upgrade-breaks-homebrew-installed-postgres
Primero necesitaba crear los directorios faltantes que aparentemente fueron eliminados durante la actualización (¡gracias Apple!).
Luego, simplemente vuelva a iniciar postgres usando la secuencia de inicio normal de homebrew:
Gracias Ruckus Notes por ayudarme a resolver mi problema. Espero que te ayude también.
fuente
INSTRUCCIONES DE REINICIAR DURO
Tuve este mismo problema después de un reinicio completo. Después de verificar el
postmaster.pid
pid del archivo, noté que no tenía ningún proceso en ejecución. No quería borrar el archivo .pid, en su lugar usé unpg-stop
alias que había creado en mi.bash_profile
. este alias solo se ejecutapg_ctl -D /usr/local/var/postgres stop -s -m fast
Para referencia
salida de registro después
pg-stop
elaborar cerveza
Pensé que también debería mencionar aquí que si ha instalado postgres con homebrew, debería
brew services
echar un vistazo. Así es como prefiero iniciar / detener mis bases de datos.fuente
Recibí este error después de, creo, mi computadora se bloqueó. PostgreSQL ni siquiera pudo comenzar debido a este error, por lo que matar el proceso no era la solución. Simplemente hice una copia de seguridad y luego eliminé el
postmaster.pid
archivo y luego el error se detuvo y PG pudo comenzar de nuevo.fuente
A veces los humildes
pg_ctl -w restart
pueden hacer el truco :-)fuente
/usr/pgsql/9.3/data/postmaster.pid
no estaba presente en ps aux.)Eliminar postmaster.pid es en realidad algo muy decente que hacer en cada arranque, a ciegas. Eso es lo que hace mi sistema. Debido a que acaba de arrancar, sabe que no se está ejecutando ningún proceso de Postgres, y si se está recuperando de un cierre no limpio, este archivo estará allí para evitar su recuperación.
Un mejor diseño para Postgres sería colocar el archivo postmaster.pid en el sistema de archivos / run, por lo que se garantiza que se eliminará en cada reinicio. Muchos otros servidores funcionan de esa manera.
fuente