macos - puedo - osx el capitan descargar mega
Falta `pg_tblspc` después de la instalación de la última versión de OS X(Yosemite o El Capitán) (5)
Utilizo postgres de homebrew en mi OS X, pero cuando reinicio mi sistema, a veces el postgres no se inicia después del reinicio, por lo que intenté iniciarlo manualmente con postgres -D /usr/local/var/postgres
, pero luego ocurrió 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 obtener el 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 archivo pg_tblspc
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 rellenar 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 principal éxito 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 que Yosemite te actualice ahora estás cubierto por ahora leyendo este hilo.
Esto es 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, así que incluso después de agregar directorios no pude reiniciar. Intenté usar pg_ctl stop -m fast
para matar el servidor PostgreSQL pero no pg_ctl stop -m fast
suerte. También intenté ir tras el proceso directamente con kill PID
pero tan pronto como lo hice, un proceso PostgreSQL volvió a aparecer con un PID diferente.
La clave terminó siendo un archivo .plist
que Homebrew había cargado ... La solución para mí terminó siendo:
launchctl unload /Users/me/Library/LaunchAgents/homebrew.mxcl.postgresql92.plist
Después de eso pude iniciar PostgreSQL normalmente.
La creación de los directorios faltantes ciertamente funciona, pero lo arreglé reinicializando postgres db, este es un enfoque más limpio para evitar problemas futuros.
NOTA: Este enfoque eliminará las bases de datos existentes
$ rm -r /usr/local/var/postgres
$ initdb -D /usr/local/var/postgres
La respuesta de es acertada, solo quería agregar que, como hice diferentes cosas con la base de datos (por ejemplo, rake db:test
), buscó diferentes directorios que no se han mencionado anteriormente y se ahogarían cuando no lo eran. Presente, en mi caso pg_logical/mappings
, por lo que es posible que desee configurar un terminal en ejecución:
tail -f /usr/local/var/postgres/server.log
y observe si faltan carpetas mientras realiza las actividades típicas de la base de datos.
Los directorios que faltan deben estar presentes en su directorio de datos de 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 archivo .plist
recomendado por .plist
que inicia PostgreSQL, puede encontrar el directorio de datos allí:
cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
(Es la opción -D
con la que empezaste postgres :)
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/postgres</string>
<string>-D</string>
<string>/usr/local/pgsql/data</string>
En el ejemplo anterior, crearía los directorios faltantes en /usr/local/pgsql/data
, así:
cd /usr/local/pgsql/data
mkdir {pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots,pg_logical}
mkdir pg_logical/{snapshots,mappings}
Resuelto ... en parte.
Aparentemente, la instalación de las últimas versiones de OS X (por ejemplo, Yosemite o El Capitan) elimina algunos directorios en /usr/local/var/postgres
.
Para solucionar este problema, simplemente vuelva a crear los directorios que faltan:
mkdir /usr/local/var/postgres/pg_tblspc
mkdir /usr/local/var/postgres/pg_twophase
mkdir /usr/local/var/postgres/pg_stat
mkdir /usr/local/var/postgres/pg_stat_tmp
mkdir /usr/local/var/postgres/pg_replslot
mkdir /usr/local/var/postgres/pg_snapshots
O, más concisamente ( gracias a Nate ):
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/
La ejecución de 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 se está ejecutando Postgres. Tal vez, como parte de una 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 futuras eliminaciones.
touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep
Nota : la creación del archivo .keep
en esos directorios creará algo de ruido en su archivo de registro, pero no parece afectar negativamente a nada más.