Pourquoi PostgreSQL 9.3 ne démarre-t-il pas sur Ubuntu?

13

J'ai installé PostgreSQL 9.3 avec succès à partir du référentiel APT sur 2 machines virtuelles exécutant Ubuntu 12.04 et 13.04 ... cependant, je ne parviens pas à l'installer correctement sur ma machine hôte exécutant Ubuntu 12.04.

L'installation (cette fois) semble avoir bien fonctionné, mais il y a peut-être une erreur que je ne comprends pas:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

J'essaie donc de m'ajouter en tant qu'utilisateur PostgreSQL, mais j'obtiens ceci:

createuser: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Je ne vois pas PostgreSQL s'exécuter dans le moniteur système, et il n'y a aucun fichier dans le dossier / var / run / postgresql / ... complètement vide.

EDIT: Sur les VM, il y a un fichier dans / var / run / postgresql / appelé 9.3-main.pid

Il n'y a rien dans le fichier journal de la machine hôte situé / var / log / postgresql

Alors ... qu'est-ce qui se passe ici qui ne se passe pas dans mes VM? Comme je l'ai dit, les autres installations sur les machines virtuelles, y compris PostGIS et PGAdmin sont arrivées parfaitement ... aucune idée pourquoi cette machine hôte ne passe pas ...

DPSSpatial
la source
Avez-vous réellement un /var/run/postgresqlannuaire? À un moment donné, après une installation réussie, ce dossier manquait sur ma machine. Que dit la configuration sur le répertoire qu'elle doit utiliser?
Colin 't Hart
@ Colin'tHart J'ai ce répertoire ... mais il n'y a rien dedans ... dans les machines virtuelles, il y a un fichier créé appelé 9.3-main.pid Où trouver ces informations de configuration?
DPSSpatial
postgresql.confdans le répertoire de configuration, qui selon ci-dessus, est /etc/postgresql/9.3/main. Vous devriez également regarder dans les fichiers journaux, probablement dans /var/log/postgresql.
Colin 't Hart
@ Colin'tHart Le fichier journal est vide ... Le fichier de configuration - et je pense que c'est ce que vous recherchez - indique # Si external_pid_file n'est pas explicitement défini, aucun fichier PID supplémentaire n'est écrit. external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial
Y a-t-il un fichier socket dans ce répertoire, ou est-il vraiment complètement vide?
Colin 't Hart

Réponses:

16

Mes paramètres régionaux n'étaient pas correctement configurés lors de l'installation de PostgreSQL. La purge et la réinstallation n'ont pas aidé. J'ai suivi les instructions ici et cela a fait l'affaire pour moi.

Parties essentielles des informations liées reproduites ci-dessous:

Le problème s'est présenté de la manière suivante:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

Le premier a été très facile à résoudre en exécutant:

#dpkg-reconfigure locales

... et en choisissant les paramètres régionaux préférés.

Mais après cela, PostgreSQL a toujours refusé de démarrer. Cela est dû au fait que le processus d'installation a tenté de créer un cluster au moment de l'installation, mais en raison des mauvais paramètres régionaux, cela n'a pas été fait. Nous devons donc refaire cette étape en exécutant:

#pg_createcluster 9.3 main --start

(Pour la version 9.3 de PostgreSQL)

Après cette étape, PostgreSQL démarre sans problème via

#/etc/init.d/postgresql start
Marko Benko
la source
2
Sauvé ma vie. Il est vraiment nul que la purge et la réinstallation n'aident pas, même lorsque les paramètres régionaux sont rectifiés. Cela a gâché 2 heures de ma vie :(
Escher
Dans le cas où pg_createclustervous dit que le cluster existe déjà besoin de déposer d' abord (ce qui efface toutes les données en elle, alors assurez-vous d' avoir une sauvegarde): pg_dropcluster 9.3 main.
Florian Brucker
6

J'espère que vous avez déjà résolu ce problème, mais je rencontre un problème similaire qui semble avoir une source différente, et peut-être que mon expérience vous aidera si vous rencontrez toujours un problème.

Mon problème avec 9.3 sur Ubuntu concerne le répertoire socket qui est un répertoire transitoire dans / run. Fondamentalement, le script init.d est censé prendre soin de créer le répertoire socket dans / run / postgresql s'il n'existe pas lors de l'action de démarrage. Cela va toujours être l'état des choses après un redémarrage.

Le problème est, cependant, que le script init.d se fermera avant d'exécuter l'action de démarrage si le répertoire socket n'existe pas. En effet, l'appel à pg_lsclusters échouera sans le répertoire de socket, ce qui à son tour empêche l'action de démarrage de créer le répertoire de socket.

Je n'ai pas compris quelle est la meilleure solution, mais si je déplace la logique de création du répertoire de socket de l'action de démarrage avant l'appel à pg_lsclusters, je peux démarrer le serveur après le redémarrage sans problème.

Voici la partie de l'action de démarrage qui gère la création du répertoire socket:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

Je publierai une mise à jour si la cause première de cela devient claire pour moi, car cela ne peut clairement pas être le comportement attendu.

ADDENDA:

Je pense que la raison pour laquelle j'ai rencontré ce problème est parce que je n'avais pas de bonne valeur configurée pour unix_socket_directories . Sur 9.2, cette option de configuration était unix_socket_directory, que j'ai supprimée plutôt que de passer à unix_socket_directories. Depuis que j'ai défini une valeur pour unix_socket_directories, je n'ai eu aucun problème avec le démarrage du serveur.

tdg5
la source
merci @ tdg5 !!! Je n'ai pas résolu cela, mais je pense que cela se résume à plusieurs mauvaises installations sur ma machine. L'installation à partir du référentiel Apt de PostgreSQL sur une nouvelle installation d'ubuntu a résolu mes problèmes ...
DPSSpatial
3
@mapBaker - J'ai mis à jour ma réponse pour inclure la cause première du problème de démarrage de PG 9.3 dans ma situation particulière. Cela vous sera peut-être également utile.
tdg5
1
Mon PG9.3 n'a pas démarré après le redémarrage. L'ajout de la ligne "unix_socket_directories = '/ var / run / postgresql'" au postgresql.conf de 9.3 l'a résolu. Merci
alfonx
Merci! J'y travaille depuis un moment, heureux de trouver cette pépite!
Serban Tanasa
3

J'ai eu plusieurs problèmes avec le fichier sockets, dans votre cas /var/run/postgresql/.s.PGSQL.5432

assurez-vous que le répertoire / var / run / postgresql existe et est accessible en écriture avant de démarrer postgresql pour plus d'informations, voir cette discussion .

également, lors de la connexion, utilisez l'indicateur -h:

psql -h localhost 

et voir si cela le résout.

Joe Love
la source
1

Cela semble résoudre le problème sur Ubuntu:

Modifiez postgresql.conf:

unix_socket_directories='/var/run/postgresql

Maintenant service postgresql start

Sorin
la source
1

Je suis nouveau dans PSQL mais j'ai résolu le problème en éditant start.conf J'avais commenté le paramètre "auto" pour gérer le serveur manuellement, mais il a besoin d'une valeur: auto, manuel ou désactivé.

EGD.

Ernesto
la source
1

De mon côté, le script de démarrage est incorrect. Les fichiers de configuration sont installés dans /etc/postgresql/9.3/main mais le script /usr/share/postgresql-common/init.d-functions recherche dans

for c in /etc/postgresql/"$2"/*; do 

Remplacez cette ligne par

for c in /etc/postgresql/"$2"/main; do
k_o_
la source
-2

Tout,

après avoir creusé, j'ai trouvé (une) solution ici:

http://ubuntuforums.org/showthread.php?t=869080

Qui contenait ces instructions:

Exécuter dans le terminal:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

Maintenant, mon serveur est opérationnel !!!

EDIT : après un redémarrage, le serveur ne fonctionne toujours pas ...

Toutes les pensées quant à la raison pour laquelle je devais exécuter cela sont appréciées!

DPSSpatial
la source
Êtes-vous sûr qu'il est en cours d'exécution 9.3? Le numéro de version semble suspect ...
dezso
@dezso désolé oublié de changer la version # quand j'ai collé dans ces commandes ... tout cela est en v9.3 ...
DPSSpatial
Vous devrez peut-être spécifier le port. Le port par défaut est utilisé par votre ancienne installation de postgres. Votre nouvelle installation utilise probablement le port 5433, mais c'est quelque chose que vous pouvez vérifier avec certitude en lisant le fichier de configuration postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581
1
Cela peut être une solution de contournement mais clairement pas une bonne solution. Celui-ci résout
sorin