Yo uso postgres de homebrew en mi OS X, pero cuando reinicio mi sistema, a veces los postgres no se inicia después del reinicio, y lo que he intentado manualmente para comenzar con postgres -D /usr/local/var/postgres
, pero entonces se produjo el error con el siguiente mensaje: FATAL: could not open directory "pg_tblspc": No such file or directory
.
La última vez que ocurrió, no pude llevarlo al estado original, así que decidí desinstalar todo el sistema de postgres y luego lo reinstalé y creé usuarios, tablas, conjuntos de datos, etc. Fue muy desagradable, pero ocurre con frecuencia en mi sistema, digamos una vez en unos pocos meses.
Entonces, ¿por qué pierde el pg_tblspc
archivo con frecuencia? ¿Y hay algo que pueda hacer para evitar la pérdida del archivo?
No he actualizado mi homebrew y postgres a la última versión (es decir, he estado usando la misma versión). Además, todo lo que hice en la base de datos de Postgres es eliminar la tabla y llenar los nuevos datos todos los días. No he cambiado el usuario, contraseña, etc.
EDITAR (mbannert): sentí la necesidad de agregar esto, ya que el hilo es el éxito principal en Google para este problema y para muchos el síntoma es diferente. Los cerveceros caseros probablemente encontrarán este mensaje de error:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Entonces, si acabas de experimentar esto después de la actualización de Yosemite, ahora estás cubierto por ahora leyendo este hilo.
fuente
pg_tblspc
es un directorio . La única forma en que puedo ver este directorio y solo este directorio que se desvanece al azar es la corrupción del sistema de archivos o un escáner de virus o herramienta de sincronización de archivos particularmente mal comportados.tablespaces
es, así que no creo que lo puse en almacenamiento externo.pg_tblspc
no solo desaparece en ningún sistema que haya encontrado, ni puedo imaginar una razón sensata para que lo haga. Va a ser muy difícil decir qué hace que su sistema sea diferente sin muchos más detalles.Respuestas:
Resuelto ... en parte.
Aparentemente, la instalación de las últimas versiones de OS X (por ejemplo, Yosemite o El Capitan) elimina algunos directorios
/usr/local/var/postgres
.Para solucionar esto, simplemente vuelva a crear los directorios que faltan:
O, de manera más concisa ( gracias a Nate ):
La nueva ejecución
pg_ctl start -D /usr/local/var/postgres
ahora inicia el servidor normalmente y, al menos para mí, sin pérdida de datos.ACTUALIZAR
En mi sistema, algunos de esos directorios están vacíos incluso cuando Postgres se está ejecutando. ¿Quizás, como parte de alguna operación de "limpieza", Yosemite elimina cualquier directorio vacío? En cualquier caso, seguí adelante y creé un archivo '.keep' en cada directorio para evitar su eliminación futura.
Nota : Crear el
.keep
archivo en esos directorios creará algo de ruido en su archivo de registro, pero no parece afectar negativamente a nada más.fuente
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/
ytouch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
La respuesta de Donavan es acertada, solo quería agregar que, como hice cosas diferentes con la base de datos (p
rake db:test
. Ej. ), Buscó diferentes directorios que no se han mencionado anteriormente y se ahogarían cuando no estuvieran presentes, en mi casopg_logical/mappings
, por lo que es posible que desee configurar un terminal en ejecución:y observe las carpetas que faltan mientras revisa las actividades típicas de la base de datos.
fuente
Esto está un poco fuera de tema, pero vale la pena señalarlo aquí como parte del proceso de recuperación de PostgreSQL Yosemite. Tuve el mismo problema que el anterior Y tuve un problema con PostgreSQL "aparentemente" ejecutándose en segundo plano, por lo que incluso después de agregar directorios no pude reiniciar. Intenté usar
pg_ctl stop -m fast
para matar el servidor PostgreSQL pero no tuve suerte. También intenté seguir el proceso directamente,kill PID
pero tan pronto como lo hice, un proceso PostgreSQL reapareció con un PID diferente.La clave terminó siendo un
.plist
archivo que Homebrew había cargado ... La solución para mí terminó siendo:Después de eso pude iniciar PostgreSQL normalmente.
fuente
launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
pero básicamente ese también era el mismo problema para mí y la misma solución.Los directorios que faltan deben estar presentes en su directorio de datos PostgreSQL. El directorio de datos predeterminado es
/usr/local/var/postgres/
. Si ha configurado un directorio de datos diferente, debe volver a crear los directorios que faltan allí. Si modificó el.plist
archivo recomendado por homebrew que inicia PostgreSQL, puede encontrar el directorio de datos allí:(es la
-D
opción con la que comenzaste postgres :)En el ejemplo anterior, crearía los directorios que faltan
/usr/local/pgsql/data
, así:fuente
Crear los directorios que faltan ciertamente funciona, pero lo arreglé reinicializando postgres db, este es un enfoque más limpio para evitar futuros problemas.
NOTA: este enfoque eliminará las bases de datos existentes
fuente