104 votes

Impossible de se connecter à PostgreSQL qui écoute sur le port 5432

J'ai installé le Pile Django Bitnami qui incluait PostgreSQL 8.4.

Quand je cours psql -U postgres Je reçois l'erreur suivante :

psql: 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"?

PG est définitivement en marche et le pg_hba.conf ressemble à ceci :

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Qu'est-ce qui se passe ?

"Preuve" que le pg fonctionne :

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf#

9voto

mymusise Points 191

Je fais en sorte que ça marche en faisant ça :

dpkg-reconfigure locales

Choisissez votre langue préférée puis exécutez

pg_createcluster 9.5 main --start

(9.5 est ma version de postgresql)

/etc/init.d/postgresql start

et puis ça marche !

sudo su - postgres
psql

6voto

Joe Points 61

J'ai dû compiler PostgreSQL 8.1 sur Debian Squeeze car j'utilise Project Open, qui est basé sur OpenACS et ne fonctionnera pas sur les versions plus récentes de PostgreSQL.

La configuration par défaut de la compilation place le unix_socket en /tmp mais le projet Open, qui repose sur PostgreSQL, ne fonctionnera pas car il recherche l'adresse de l'utilisateur. unix_socket en /var/run/postgresql .

Il existe un paramètre dans postgresql.conf pour définir l'emplacement de la prise. Mon problème était que soit je pouvais définir pour /tmp y psql a fonctionné, mais pas l'ouverture du projet, ou je pourrais le configurer pour /var/run/postgresql y psql n'a pas fonctionné mais l'ouverture du projet a fonctionné.

Une solution à ce problème est de définir la prise pour /var/run/postgresql et ensuite exécuter psql sur la base de la suggestion de Peter, comme :

psql -h /var/run/postgresql

Il s'exécute localement en utilisant les autorisations locales. Le seul inconvénient est qu'il faut taper davantage que simplement "psql".

L'autre suggestion faite par quelqu'un était de créer un lien symbolique entre les deux emplacements. Cela a également fonctionné, mais le lien a disparu au redémarrage. Il est peut-être plus facile d'utiliser l'argument -h, cependant, j'ai créé le lien symbolique à partir du script PostgreSQL dans /etc/init.d . J'ai placé la commande de création de lien symbolique dans la section "start". Bien sûr, lorsque je lance une commande d'arrêt et de démarrage ou de redémarrage, il essaiera de recréer un lien symbolique existant, mais à part le message d'avertissement, il n'y a probablement aucun mal à cela.

Dans mon cas, au lieu de :

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

J'ai

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

et j'ai explicitement défini l'unix_socket à /var/run/postgresql/.s.PGSQL.5432 en postgresql.conf .

6voto

Noushad Points 171

Si votre service Postgres est en place et fonctionne sans aucune erreur ou s'il n'y a pas d'erreur dans le démarrage du service Postgres et que vous obtenez toujours l'erreur mentionnée, suivez ces étapes

Étape 1 : Exécution pg_lsclusters listera tous les clusters postgres fonctionnant sur votre périphérique

eg :

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Il est fort probable que le statut soit en panne dans votre cas et que le service postgres

Étape 2 : Redémarrer le pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart postgresql service
sudo service postgresql restart

Étape 3 : L'étape 2 a échoué et a généré une erreur.

Si ce processus n'aboutit pas, une erreur sera signalée. Vous pouvez voir le journal des erreurs sur /var/log/postgresql/postgresql-9.6-main.log

Mon erreur était :

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

Étape 4 : vérifier la propriété de postgres

Assurez-vous que postgres est le propriétaire de /var/lib/postgresql/version_no/main

Si ce n'est pas le cas, exécutez

sudo chown postgres -R /var/lib/postgresql/9.6/main/

Etape 5 : Vérifier que l'utilisateur postgres appartient au groupe d'utilisateurs ssl-cert

Il s'est avéré que j'avais supprimé par erreur l'utilisateur Postgres de la section ssl-cert groupe. Exécutez le code ci-dessous pour résoudre le problème du groupe d'utilisateurs et fixer les permissions

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fix ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgresql restart

4voto

parlad Points 219

La désinstallation de Postgres me semble peu convaincante. Ceci m'aide à résoudre mon problème :

  1. Démarrez le serveur postgres :

    sudo systemctl start postgresql
  2. Assurez-vous que le serveur démarre au démarrage :

    sudo systemctl enable postgresql

Des informations détaillées sont disponibles sur le site de DigitalOcean. Ici.

3voto

bogdanvlviv Points 61

Solution :

Faites ceci

export LC_ALL="en_US.UTF-8"

et ceci. ( 9.3 est ma version actuelle de PostgreSQL. Ecrivez votre version !)

sudo pg_createcluster 9.3 main --start

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X