J'utilise postgres de homebrew dans mon OS X, mais quand je redémarre mon système, parfois postgres ne démarre pas après le redémarrage, et j'ai donc essayé manuellement pour commencer avec postgres -D /usr/local/var/postgres
, mais l'erreur est survenue avec le message suivant: FATAL: could not open directory "pg_tblspc": No such file or directory
.
La dernière fois que cela s'est produit, je n'ai pas pu le remettre à son état d'origine, j'ai donc décidé de désinstaller l'ensemble du système postgres, puis de le réinstaller et de créer des utilisateurs, des tables, des jeux de données, etc. C'était tellement dégoûtant, mais cela se produit fréquemment sur mon système, disons une fois en quelques mois.
Alors pourquoi perd-il pg_tblspc
fréquemment le fichier? Et puis-je faire quelque chose pour éviter la perte du fichier?
Je n'ai pas mis à jour mes homebrews et postgres vers la dernière version (c'est-à-dire que j'utilise la même version). De plus, tout ce que j'ai fait sur la base de données postgres est de supprimer la table et de remplir les nouvelles données chaque jour. Je n'ai pas changé d'utilisateur, de mot de passe, etc ...
EDIT (mbannert): J'ai ressenti le besoin d'ajouter cela, car le fil est le top hit sur google pour ce problème et pour beaucoup le symptôme est différent. Les homebrewers rencontreront probablement ce message d'erreur:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Donc, si vous venez de vivre cela après la mise à niveau de Yosemite, vous êtes maintenant couvert pour la lecture de ce fil.
la source
pg_tblspc
un répertoire . La seule façon dont je peux voir ce répertoire et juste ce répertoire disparaissant de manière aléatoire est la corruption du système de fichiers ou un scanner de virus ou un outil de synchronisation de fichiers particulièrement mal comporté.tablespaces
c'est, donc je ne pense pas que je l'ai mis sur un stockage externe.pg_tblspc
ne disparaît pas sur n'importe quel système que j'ai jamais rencontré, et je ne peux pas imaginer une raison sensée. Il va être très difficile de dire ce qui rend votre système différent sans beaucoup plus de détails.Réponses:
Résolu ... en partie.
Apparemment, l'installation des dernières versions d'OS X (par exemple Yosemite ou El Capitan) supprime certains répertoires de
/usr/local/var/postgres
.Pour résoudre ce problème, il vous suffit de recréer les répertoires manquants:
Ou, plus concis ( grâce à Nate ):
La réexécution
pg_ctl start -D /usr/local/var/postgres
démarre maintenant le serveur normalement et, au moins pour moi, sans aucune perte de données.MISE À JOUR
Sur mon système, certains de ces répertoires sont vides même lorsque Postgres est en cours d'exécution. Peut-être que dans le cadre d'une opération de "nettoyage", Yosemite supprime tous les répertoires vides? Dans tous les cas, j'ai continué et créé un fichier «.keep» dans chaque répertoire pour éviter toute suppression future.
Remarque : La création du
.keep
fichier dans ces répertoires créera du bruit dans votre fichier journal, mais ne semble pas affecter négativement autre chose.la source
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/
ettouch /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 réponse de Donavan est juste, je voulais juste ajouter que comme je faisais différentes choses avec la base de données (par exemple
rake db:test
), elle cherchait des répertoires différents qui n’ont pas été mentionnés ci-dessus et s’étoufferait quand ils n’étaient pas présents, dans mon caspg_logical/mappings
, vous pouvez donc configurer un terminal exécutant:et surveillez les dossiers manquants pendant que vous parcourez vos activités de base de données typiques.
la source
Ceci est légèrement hors sujet mais mérite d'être noté ici dans le cadre du processus de récupération de PostgreSQL Yosemite. J'ai eu le même problème que ci-dessus ET j'ai eu un problème avec PostgreSQL "apparemment" fonctionnant en arrière-plan, donc même après avoir ajouté des répertoires, je ne pouvais pas redémarrer. J'ai essayé d'utiliser
pg_ctl stop -m fast
pour tuer le serveur PostgreSQL mais pas de chance. J'ai également essayé d'aller directement après le processus aveckill PID
mais dès que je l'ai fait, un processus PostgreSQL est réapparu avec un PID différent.La clé a fini par être un
.plist
fichier que Homebrew avait chargé ... Le correctif pour moi a fini par être:Après cela, j'ai pu démarrer PostgreSQL normalement.
la source
launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
mais au fond, c'était aussi le même problème pour moi, et la même solution.Les répertoires manquants doivent être présents dans votre répertoire de données PostgreSQL. Le répertoire de données par défaut est
/usr/local/var/postgres/
. Si vous avez configuré un répertoire de données différent, vous devez y recréer les répertoires manquants. Si vous avez modifié le.plist
fichier recommandé par homebrew qui démarre PostgreSQL, vous pouvez y trouver le répertoire de données:(c'est l'
-D
option avec laquelle vous avez commencé postgres :)Dans l'exemple ci-dessus, vous créez les répertoires manquants dans
/usr/local/pgsql/data
, comme ceci:la source
La création des répertoires manquants fonctionne certainement mais je l'ai corrigée en réinitialisant postgres db, c'est une approche plus propre pour éviter de futurs problèmes.
REMARQUE: cette approche supprimera les bases de données existantes
la source