web-dev-qa-db-fra.com

Postgres échoue avec 'n'a pas pu ouvrir le fichier de mappage de relations "global / pg_filenode.map"'

J'ai un problème avec mon installation de postgres dans mon environnement de développement et j'ai besoin d'aide pour le diagnostiquer. Je n'ai pas encore eu de chance pour trouver une solution.

  1. J'ai postgres 9.0.4 installé avec homebrew
  2. Je suis sous OS X 10.6.8 (Snow Leopard)

Je peux démarrer et arrêter le serveur

$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting

Si j'essaye d'arrêter quand même

$ pg_ctl -D /usr/local/var/postgres stop -s -m fast
pg_ctl: PID file "/usr/local/var/postgres/postmaster.pid" does not exist
Is server running?

Ok ça manque

$ ls -l /usr/local/var/postgres/ | grep postmaster
$

Mais il tourne définitivement

$ ps aux | grep postgres
pschmitz   303   0.9  0.0  2445860   1428   ??  Ss    3:12PM   0:02.46 postgres: autovacuum launcher process       
pschmitz   304   0.9  0.0  2441760    428   ??  Ss    3:12PM   0:02.57 postgres: stats collector process       
pschmitz   302   0.0  0.0  2445728    508   ??  Ss    3:12PM   0:00.56 postgres: wal writer process       
pschmitz   301   0.0  0.0  2445728    560   ??  Ss    3:12PM   0:00.78 postgres: writer process       
pschmitz   227   0.0  0.1  2445728   2432   ??  S     3:11PM   0:00.42 /usr/local/Cellar/postgresql/9.0.3/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

Et si j'essaye d'y accéder ou de l'utiliser, j'obtiens ceci.

$psql
psql: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

Mais global/pg_filenode.map existe certainement dans

$ls -l /usr/local/var/postgres/

...
-rw-------  1 pschmitz  staff   8192 Sep 16 15:48 pg_control
-rw-------  1 pschmitz  staff    512 Sep 16 15:48 pg_filenode.map
-rw-------  1 pschmitz  staff  12092 Sep 16 15:48 pg_internal.init

J'ai tenté de désinstaller et de réinstaller sans effet. Des idées sur la façon dont je peux résoudre ce problème? Cela m'a pratiquement empêché de faire quoi que ce soit aujourd'hui.

EDIT Résolu

Je ne sais pas quelle était la source de mon problème d'origine avec 9.0.3 car j'obtenais ce problème

psql: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

Cependant, comme indiqué ci-dessus, il s'avère que le processus en cours était pour ma précédente installation postgres de 9.0.3

Je crois que j'avais une ancienne version org.postgresql.postgres.plist dans ~/Library/LaunchAgents /

J'ai dû:

  1. Supprimer et rajouter l'agent de lancement
  2. Tuez les processus pour 9.0.3
  3. Initialisez la base de données initdb /usr/local/var/postgres
  4. Redémarrez mon ordinateur

et maintenant je l'ai et je travaille.

39
bullfight

Je ne sais pas quelle était la source de mon problème d'origine avec 9.0.3 car j'obtenais ce problème:

psql: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

Cependant, comme indiqué ci-dessus, il s'avère que le processus en cours était pour ma précédente installation postgres de 9.0.3

Je crois que j'avais une ancienne version org.postgresql.postgres.plist dans ~/Library/LaunchAgents /

J'ai dû:

  1. Supprimer et rajouter l'agent de lancement
  2. Tuez les processus pour 9.0.3
  3. Initialisez la base de données initdb /usr/local/var/postgres
  4. Redémarrez mon ordinateur

et maintenant je l'ai et je travaille.

29
bullfight

Cela peut être un problème d'autorisation, veuillez vérifier le propriétaire et le groupe de fichiers de configuration dans /var/lib/pgsql/9.3/data/

chown -R postgres:postgres /var/lib/pgsql/9.3/data/

résolu le problème pour moi

7
user4640867

Je viens de rencontrer ce problème. Résolu en définissant le propriétaire du répertoire de données postgres sur l'utilisateur postgres non privilégié.

6
hd1

ps aux | grep postgres a révélé que j'avais une autre instance de postgres en cours d'exécution sur un répertoire de données temporaires à partir d'un test précédent. Tuer ce processus a résolu le problème.

4
Owen Pauling

J'avais une vieille valeur de PGDATA confondant les choses.

2
Chris

Cela ( https://Gist.github.com/olivierlacan/e1bf5c34bc9f82e06bc ) a résolu mon problème! Je devais d'abord:

  1. Supprimer Postgres.app de mes applications
  2. Supprimer le répertoire/usr/local/var/postgres
  3. initdb /usr/local/var/postgres/

Ensuite, j'ai pu démarrer/arrêter Postgres avec ces 2 commandes:

Début:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

Arrêtez:

pg_ctl -D /usr/local/var/postgres stop -s -m fast
2
Raymond Gan

Ma solution étape par étape dans Fedora:

  • /bin/systemctl stop postgresql.service (Arrêtez le service)
  • rm -rf /var/lib/pgsql/data (Supprimer le direcotry "data")
  • postgresql-setup initdb (Recréer le répertoire "data")
  • /bin/systemctl start postgresql.service (Démarrer le service)

Il est également utile de vérifier les autorisations du répertoire "data":

chown -R postgres:postgres <path_to_data_dir>

(Félicitations à @LuizFernandodaSilva & @ user4640867 )

2
raratiru

Vous avez rencontré ce problème en utilisant mdillon/postgis:9.6 Image Docker. Simple Sudo docker restart <container id> résolu le problème.

1
1valdis

Ma solution à ce problème:
J'utilise postgresql-9.3

Mon fichier plist se trouve dans le répertoire suivant: /Library/LaunchDaemons/com.edb.launchd.postgresql-9.3.plist

L'étape 1 arrêtera les postgres
1. $ Sudo launchctl stop com.edb.launchd.postgresql-9.3
Démarrez postgres en utilisant la commande suivante (pouvez trouver cet emplacement en utilisant $ brew info postgres)
2. $ postgres -D/usr/local/var/postgres

1
RC_02

J'ai eu la même erreur psql: FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory.

Merci pour la note # 2 ci-dessus: "Tuez les processus pour 9.0.3"

J'ai précédemment configuré et compilé PostgreSQL. J'ai alors décidé de reconfigurer, gmake, gmake install avec différents chemins de fichiers. Le programme nouvellement compilé ne trouvait pas 'pg_filenode.map' dans le chemin de fichier attendu. Tuer le processus postgres en cours d'exécution, vider pgsql/data et recommencer initdb a permis la création d'une nouvelle base de données.

1
Ted Spradley

Je suis d'accord sur toutes les solutions ci-dessus. J'exécutais Postgres sur un serveur, et le problème était que j'utilisais un numéro de port utilisé par une autre version plus ancienne de Postgres.

Je n'avais besoin que de changer le port.

1
MFARID