`pg_tblspc que faltan después de la instalación de la última versión de OS X Yosemite o El Capitan)

Puedo usar postgres desde homebrew en mi OS X, pero cuando voy a reiniciar mi sistema, a veces el postgres no se inicia después del reinicio, y lo he intentado manualmente para iniciar 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 podía llegar a su estado original, así que me decidí a desinstalar todo el postgres del sistema y, a continuación, volver a instalar y creó a los usuarios, tablas, conjuntos de datos, etc… era tan repugnante, pero con frecuencia se produce en mi sistema, una vez en un par de meses.

Así que ¿por qué perder el pg_tblspc archivo con frecuencia? Y no hay nada que yo pueda hacer para evitar la pérdida del archivo?

No he actualizado mi homebrew y postgres a la versión más reciente (es decir, yo he estado usando la misma versión). También, todas las cosas que yo hice en la base de datos postgres es eliminar la tabla y rellenar los datos nuevos cada día. No he cambiado el usuario, contraseña, etc…

EDITAR (mbannert):
Sentí la necesidad de añadir este, ya que el hilo es el mejor resultado en google para este problema y para muchos el síntoma es diferente. Homebrewers probable que se encontrará con 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"?

Por lo tanto, si usted acaba de experimentar esto después de la actualización de Yosemite que ahora está cubierto por ahora de leer este hilo.

  • Eep, realmente, realmente no debería! Cuando usted dice «última versión», sírvase indicar el número exacto de la versión. También, se han de poner espacios en almacenamiento externo? donde los datos de PostgreSQL directorio?
  • También, pg_tblspc es un directorio. La única manera que puedo ver este directorio, y sólo este directorio al azar de fuga es la corrupción del sistema de ficheros o un particular se portó mal escáner de virus o archivo de la herramienta de sincronización.
  • No tengo escáner de virus. No sé qué tablespaces es, así que no creo que lo puse en el almacenamiento externo.
  • Hm. Todo lo que puedo decir es que algo está mal. pg_tblspc no acaba de desaparecer en cualquier sistema que he encontrado, ni puedo imaginar una sana razón por la que lo haría. Va a ser muy difícil decir lo que hace que su sistema diferente sin muchos más detalles.
  • Lo que he hecho en mi postgres 1) seleccione una base de datos, 2) eliminar todos los datos en la DB, 3) rellenar los nuevos datos a la DB, 4) empuje a heroku. Este procedimiento se realiza todos los días. ¿Crees que lo empuja a heroku DB es algo relacionado?
  • «seleccione una base de datos», «borrar todos los datos en la db». Los detalles?
  • Ah, perdón, estaba equivocado. Yo hice todo el procedimiento anterior en mi MySQL del sistema y, a continuación, copiar la base de datos mysql a la correspondiente base de datos postgres utilizando py-mysql2pgsql(github.com/philipsoutham/py-mysql2pgsql)
  • OK, bien, que parece estar relacionada, es sólo el uso de PostgreSQL bibliotecas de cliente o a la generación de una secuencia de comandos SQL. Usted tendría que meterse directamente con el directorio de datos para crear el problema que estamos teniendo.
  • A continuación, es la actualización del sistema operativo relevante? Yo uso Yosemite beta ahora mismo, pero no estoy seguro de cuándo se produjo con anterioridad. He actualizado siempre que la nueva beta está disponible (por un total de 6 o 7 veces, creo).
  • Beta del sistema operativo? Sí, eso es, probablemente, un candidato para el problema. Tal vez debería mencionar esto con Apple, quizá ha encontrado un error. De nuevo, es casi imposible decir sin detallados de la investigación y la capacidad para reproducir el problema.
  • Fueron capaces de encontrar una solución para este @Gardecolo? Estoy teniendo el mismo problema después de actualizar a Yosemite.
  • no. He desinstalado y vuelto a instalar la misma. Yo nunca pienso que debo hacer, pero tenía que recuperarlo tan pronto como sea posible porque yo lo uso para mi negocio…
  • No sé acerca de las pruebas beta de Apple inc., pero la versión de lanzamiento de Yosemite todavía tiene el problema. Enfin, vino aquí y problema resuelto.
  • Escribí una entrada en el blog siguiendo esta y otra cuestión que, después de investigar el tema un poco más. En general simplemente no puedo creer cómo Apple ha manejado este. blog.2ndquadrant.com/…
  • Alguien ha conseguido averiguar lo que en OS X está haciendo esto todavía? Es una locura de comportamiento.
  • Tengo una ruta de instalación personalizada en $HOME, un día pensé que me iba a limpiar todos los directorios vacíos y esto ocurrió durante la próxima PostgresSQL reiniciar. Los directorios vacíos no son inútiles, después de todo.

InformationsquelleAutor Blaszard | 2014-09-22

5 Kommentare

  1. 924

    Resuelto… en parte.

    Al parecer, 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 esto simplemente recrear la falta de directorios:

    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, de forma más concisa (gracias a Nate):

    mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/

    Volver a ejecutar pg_ctl start -D /usr/local/var/postgres ahora se inicia normalmente el servidor y, al menos para mí, sin ninguna pérdida de datos.

    ACTUALIZACIÓN

    En mi sistema, algunos de estos directorios están vacías, incluso cuando Postgres se está ejecutando. Tal vez, como parte de la «limpieza» de la operación, Yosemite elimina cualquier directorios vacíos? En cualquier caso, me fui por delante y crea una».mantener’ de archivos en cada directorio para prevenir la futura eliminación.

    touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep

    Nota: la Creación de la .keep archivo en los directorios crear algo de ruido en el fichero de registro, pero no parece afectar negativamente a cualquier otra cosa.

    • ¿Todavía perder otros archivos/directorios en /usr/local/var/postgres, tales como pg_clog, pg_stat, pg_subtrans, base, etc…?
    • Yo no, no. Yo era sólo faltan los tres
    • En mi caso, todos los archivos que permaneció allí fueron postmaster.opts y server.log. Pero gracias por la información.
    • Puede ser debido a la extracción y re-instalación de Postgres?
    • Después de volver a instalar postgres, todo parece bien. Así que creo que es debido a la instalación de Yosemite Beta.
    • Estoy de acuerdo. En mi caso fue solo esas tres directorios, pero como yo no sé por qué es la eliminación de alguna directorios, es totalmente posible, podría remover los demás.
    • Tuve exactamente el mismo problema—esta solucionado. Instalación de GM Candidate (14A379a) sobre los ya existentes (y de trabajo) 10.9.5. El instalador de Yosemite debe de haber quitado estos directorios vacíos.
    • Reinstalación de Postgres con Cerveza no recrear esos directorios. Entonces, yo tenía que seguir Donovan y el asesoramiento que crear a mano.
    • Sólo una sugerencia de una forma más concisa comando: mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/ y touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
    • Y esto corrige PostG después de instalar Yosemite 10.10 liberación.
    • Gracias! Trabajó para mí en la última versión de Yosemite y postgresql 9.3.2 en
    • Gracias! Tenía el mismo problema después de actualizar a Yosemite. Cerveza de actualización de postgres no ayuda.
    • Puede que no necesite para crear los tres directorios (sólo tuve que crear dos). Ejecutar pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start -w para obtener una mejor salida al iniciar postgres. A continuación, hacer tail -5 /usr/local/var/postgres/server.log para ver errores en el inicio. Los errores se indican los directorios que faltan.
    • Los .mantener los archivos realmente me causa algo de dolor en los registros del servidor: could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
    • Sí, he de conseguir esas entradas de registro demasiado, pero no me molestes. Si te molestan, puedes quitar el .mantener los archivos ya no son estrictamente necesarias. Simplemente mantener los directorios de ser borrados accidentalmente (ya que no está vacío).
    • Yo también faltaban pg_snapshots y pg_stat directorios.
    • si los registros son molestos intentar chown-ción de los .mantener los archivos y chmod-ción de manera que el usuario que postgres se ejecuta como no puede ver los archivos ( Nota: esto podría ser imposible )
    • Gracias por esta…me acaba de actualizar a Yosemite esta mañana y, a la derecha en la señal, PostgreSQL dejado de funcionar porque al parecer Apple sólo tiene que fep con los no-OS-paquetes esenciales. Me estoy cansando de cada actualización de OS X ser un fiasco.
    • Si usted mira el instalador de Yosemite (Comando-L mientras se está ejecutando, y teniendo SIEMPRE!!) verás que se mueve todo en /usr/local alrededor de furiosamente – ni idea de por qué, pero apuesto a que los directorios vacíos perderse. ¡Qué conveniente!
    • En mi caso la .mantener los archivos deben ser directorios, por lo que sólo he ejecutado este: mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
    • para iniciar postgres necesito corrió pg_ctl start -D /usr/local/var/postgres/*
    • Yo también tuve que crear un directorio extra ‘pg_replslot’. Excepto que funciona bien. Gracias!
    • experimentado mismo como @Lucas por una botella de postgres 9.4.0. Tuve que mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
    • Experiencia en ello, pero había que ejecutar el siguiente para conseguir un servidor.registro sin advertencias o errores: mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot,pg_stat,pg_logical/snapshots,pg_logical/mappings,pg_snapshots}/. Esto es para brew postgresql 9.4.1
    • ¿Cómo se puede conseguir Postgres para que se inicie automáticamente al reiniciar el sistema? Parece que cada vez que reinicio mi equipo ahora, después de la implementación de la solución que necesita para ejecutar pg_ctl start-D /usr/local/var/postgres de nuevo para conseguir que todo funcione y no tenía la necesidad de hacerlo antes de la actualización a Yosemite.
    • Tenía que hacer lo mismo después de la instalación de la última versión de postgres 9.4.5_2 en El Capitan. La solución sigue siendo aplicable. Obras.
    • He tenido que añadir /usr/local/var/postgres/pg_logical/snapshots y /usr/local/var/postgres/pg_logical/mappings para iniciar el servidor. (Yosimite, brew install homebrew/versiones/postgresql94)

  2. 9

    Donavan‘s respuesta está en el clavo, yo sólo quería añadir que, como yo hice cosas diferentes con la base de datos (por ejemplo,rake db:test), se fue en busca de diferentes directorios que no se han mencionado anteriormente y que ahogan cuando no estaban presentes, en mi caso pg_logical/mappings, si lo desea, puede configurar un terminal ejecuta:

    tail -f /usr/local/var/postgres/server.log

    y observa las carpetas que faltan, mientras que ir a través de su base de datos típica actividades.

    • Necesarios para agregar el comando mkdir-p /usr/local/var/postgres/pg_logical/{instantáneas,asignaciones}
  3. 6

    Esto es un poco off-topic, pero vale la pena señalar aquí como parte de la PostgreSQL Yosemite proceso de recuperación. Yo tenía el mismo problema que el anterior Y tuve un problema con PostgreSQL «aparentemente» se ejecuta en segundo plano, incluso después de agregar los directorios no podía reiniciar. He intentado utilizar pg_ctl stop -m fast para matar el servidor PostgreSQL pero no hubo suerte. También he intentado ir después de que el proceso directamente con kill PID pero tan pronto como lo hice yo que un PostgreSQL proceso de re-apareció con un PID diferente.

    La clave terminó siendo un .plist archivo 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 que yo era capaz de empezar a PostgreSQL normalmente.

    • Mi plist fue nombrado de forma ligeramente diferente: launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist pero, básicamente, que también era el mismo problema para mí, y la solución del mismo.
  4. 4

    La falta de directorios deben estar presentes en su PostgreSQL directorio de datos. El directorio de datos predeterminado es /usr/local/var/postgres/. Si ha configurado una diferente directorio de datos, es necesario re-crear la falta de directorios. Si has modificado el homebrew recomendado .plist archivo que se inicia PostgreSQL, usted puede encontrar el directorio de datos hay:

    cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

    (es el -D opción que comenzó postgres con:)

      <key>ProgramArguments</key>
      <array>
        <string>/usr/local/bin/postgres</string>
        <string>-D</string>
        <string>/usr/local/pgsql/data</string>

    En el ejemplo anterior, se crearía la falta de directorios 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}
  5. -20

    La creación de la falta de directorios sin duda funciona pero me fijo por reinititializing postgres db, este es un limpiador de enfoque para evitar problemas en el futuro.

    NOTA: Este enfoque va a eliminar las bases de datos existentes

    $ rm -r /usr/local/var/postgres
    $ initdb -D /usr/local/var/postgres
    • Obviamente, la eliminación de las bases de datos existentes no es una excepción menor aquí. Esta un poco como diciendo «yo no podía encontrar en /var/tmp así que he vuelto a instalar el sistema operativo.»
    • Oh, hombre, esto es más «limpios» que cualquier cosa que yo pueda pensar 🙂 Solo espero que algún azar copia-pega de la interwebz no disparar directamente en su consola sin mirarlo 🙂
    • Lo siento por el voto de Greg, pero yo recomiendo reformulación de su solución para hacer explícito que este enfoque sólo debe ser utilizado en el desarrollo o si el usuario puede permitirse el lujo de borrar de DB.
    • ¿Por qué es esto votada abajo tanto? En un dev server este es el camino correcto.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea