Impossible de se connecter à postgresql sur le port 5432

61

J'ai installé la pile Bitnami Django comprenant PostgreSQL 8.4.

Lorsque j'exécute psql -U postgres , j'obtiens 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 fonctionne définitivement et le fichier 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

Ce qui donne?

"Preuve" que pg est en cours d'exécution:

[email protected]:/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
[email protected]:/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  
[email protected]:/home/assaf# 
    
posée Assaf Lavie 26.06.2011 - 14:21
la source

18 réponses

69

Ce problème provient de l’installation du package postgres sans numéro de version. Bien que postgres soit installé et qu'il s'agisse de la version correcte, le script de configuration du cluster ne fonctionnera pas correctement. c'est un problème d'emballage.

Si vous êtes à l'aise avec postgres , vous pouvez exécuter un script pour créer ce cluster et exécuter postgres . Cependant, il existe un moyen plus facile.

Commencez par purger l’ancienne installation postgres. Le problème réside actuellement dans 9.1, donc je suppose que c'est ce que vous avez installé

sudo apt-get remove --purge postgresql-9.1

Maintenant, réinstallez simplement

sudo apt-get install postgresql-9.1

Notez le nom du package avec le numéro de version. HTH.

    
réponse donnée Stewart 20.08.2013 - 01:54
la source
19

Le message d'erreur fait référence à un socket de domaine Unix, vous devez donc modifier votre appel netstat pour ne pas les exclure. Essayez donc sans l'option -t :

netstat -nlp | grep 5432

Je suppose que le serveur écoute réellement le socket /tmp/.s.PGSQL.5432 plutôt que le /var/run/postgresql/.s.PGSQL.5432 auquel votre client tente de se connecter. C'est un problème typique lors de l'utilisation de paquets PostgreSQL compilés manuellement ou de tiers sur Debian ou Ubuntu, car la source par défaut pour le répertoire de socket du domaine Unix est /tmp mais l'emballage de Debian le transforme en /var/run/postgresql .

Solutions possibles:

  • Utilisez les clients fournis par votre package tiers (appelez /opt/djangostack-1.3-0/postgresql/bin/psql ). Désinstallez éventuellement les paquets fournis par Ubuntu (peut-être difficile à cause d'autres dépendances inverses).
  • Corrigez le répertoire de socket du package tiers pour qu'il soit compatible avec Debian / Ubuntu.
  • Utilisez plutôt -H localhost pour vous connecter via TCP / IP.
  • Utilisez le paramètre -h /tmp ou équivalent PGHOST pour pointer vers le bon répertoire.
  • N'utilisez pas de packages tiers.
réponse donnée Peter Eisentraut 27.06.2011 - 19:41
la source
16

Vous pouvez utiliser psql -U postgres -h localhost pour forcer la connexion sur TCP plutôt que sur les sockets de domaine UNIX; votre sortie netstat indique que le serveur PostgreSQL écoute sur le port 5432 de localhost.

Vous pouvez savoir quel socket UNIX local est utilisé par le serveur PostgrSQL en utilisant une invocation différente de netstat :

netstat -lp --protocol=unix | grep postgres

Dans tous les cas, les interfaces sur lesquelles le serveur PostgreSQL écoute sont configurées dans postgresql.conf .

    
réponse donnée Riccardo Murri 26.06.2011 - 14:51
la source
15

Créez simplement un lien symbolique comme celui-ci:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
    
réponse donnée Uriel 09.07.2012 - 03:35
la source
13

Cela fonctionne pour moi:

Edit: postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

Activer ou ajouter:

listen_addresses = '*'

Redémarrez le moteur de base de données:

sudo service postgresql restart

Vous pouvez également vérifier le fichier pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

Et ajoutez votre adresse réseau ou hôte:

host    all             all             192.168.1.0/24          md5
    
réponse donnée angelous 09.10.2014 - 15:17
la source
5

Je devais compiler PostgreSQL 8.1 sur Debian Squeeze car j'utilisais Project Open, basé sur OpenACS et qui ne fonctionnerait pas sur les versions plus récentes de PostgreSQL.

La configuration de compilation par défaut place unix_socket dans /tmp , mais Project Open, qui repose sur PostgreSQL, ne fonctionnerait pas car il recherche unix_socket at /var/run/postgresql .

Il existe un paramètre dans postgresql.conf pour définir l'emplacement du socket. Mon problème était que je pouvais définir /tmp et psql travaillé, mais pas ouvrir le projet, ou je pouvais le définir pour /var/run/postgresql et psql ne fonctionnerait pas, mais le projet était ouvert.

Une solution au problème consiste à définir le socket pour /var/run/postgresql puis à exécuter psql , selon la suggestion de Peter, sous la forme:

psql -h /var/run/postgresql

Cela fonctionne localement en utilisant des autorisations locales. Le seul inconvénient est qu'il est plus typé que simplement "psql".

L'autre suggestion que quelqu'un a faite était de créer un lien symbolique entre les deux endroits. Cela a également fonctionné, mais le lien a disparu au redémarrage. Il est peut-être plus simple d'utiliser l'argument -h, cependant, j'ai créé le lien symbolique depuis le script PostgreSQL dans /etc/init.d . J'ai placé la commande de lien symbolique create dans la section "start". Bien entendu, lorsque j'émettrai une commande d'arrêt et de démarrage ou de redémarrage, il tentera de recréer un lien symbolique existant, mais à part le message d'avertissement, il n'y a probablement aucun danger.

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 définissez explicitement le unix_socket sur /var/run/postgresql/.s.PGSQL.5432 in postgresql.conf .

    
réponse donnée Joe 06.11.2012 - 04:22
la source
5

Je le fais fonctionner en faisant ceci:

dpkg-reconfigure locales

Choisissez vos paramètres régionaux préférés 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
    
réponse donnée mymusise 13.09.2016 - 11:05
la source
3

Solution:

Faites ceci

export LC_ALL="en_US.UTF-8"

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

sudo pg_createcluster 9.3 main --start
    
réponse donnée bogdanvlviv 23.02.2016 - 22:47
la source
2

Dans mon cas, cela a été causé par une faute de frappe lors de la modification de /etc/postgresql/9.5/main/pg_hba.conf

J'ai changé:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

à:

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

Mais MD5 devait être en minuscules md5 :

# Database administrative login by Unix domain socket
local   all             postgres                                md5
    
réponse donnée Mehdi Nellen 29.11.2016 - 11:15
la source
1

Je n'ai pas réussi à résoudre ce problème avec mon serveur postgres-9.5. Après 3 jours de progrès zéro en essayant chaque permutation de correction sur ce site et sur d'autres sites, j'ai décidé de réinstaller le serveur et de perdre 5 jours de travail. Mais j'ai reproduit le problème sur la nouvelle instance. Cela pourrait vous donner une idée de la manière de résoudre le problème avant d'adopter l'approche catastrophique que j'ai adoptée.

D'abord, désactivez tous les paramètres de journalisation dans postgresql.conf. Ceci est la section:

# ERROR REPORTING AND LOGGING

Commentez tout dans cette section. Puis redémarrez le service.

Lors du redémarrage, utilisez /etc/init.d/postgresql start ou restart J'ai trouvé utile d'être en mode superutilisateur lors du redémarrage. J'avais une fenêtre ouverte juste pour cette opération. Vous pouvez établir ce mode superutilisateur avec sudo -i .

Vérifiez que le serveur peut être atteint avec cette simple commande: psql -l -U postgres

Si cela ne résout pas le problème, considérez ceci:

Je changeais de propriétaire sur de nombreux dossiers tout en essayant de trouver une solution. Je savais que j'essayerais probablement de rétablir ces propriétés de dossier et chmod s pendant 2 jours supplémentaires. Si vous avez déjà manipulé ces propriétés de dossier et que vous ne souhaitez pas purger complètement votre serveur, commencez par suivre les paramètres de tous les dossiers concernés pour les ramener à leur état d'origine. Vous pouvez essayer de faire une installation parallèle sur un autre système et vérifier systématiquement la propriété et les paramètres de tous les dossiers. Fastidieux, mais vous pourrez peut-être accéder à vos données.

Une fois que vous avez accès, modifiez systématiquement chaque ligne pertinente dans la section # ERROR REPORTING AND LOGGING du fichier postgresql.conf . Redémarrez et testez. J'ai constaté que le dossier par défaut des journaux provoquait une défaillance. J'ai spécifiquement commenté log_directory . Le dossier par défaut dans lequel le système dépose les journaux est alors /var/log/postgresql .

    
réponse donnée jurban1997 19.01.2017 - 02:34
la source
1

Si votre service Postgres est opérationnel sans erreur ou qu’il n’ya aucune erreur lors du démarrage du service Postgres et que vous obtenez toujours l’erreur mentionnée, procédez comme suit

Etape 1: L'exécution de pg_lsclusters listera tous les clusters postgres s'exécutant sur votre appareil

par exemple:

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

le plus probablement le statut sera en panne dans votre cas et le service postgres

Etape 2: Redémarrez le pg_ctlcluster

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

#restart postgres
sudo service postgres restart

Étape 3: L'étape 2 a échoué et une erreur est survenue

Si ce processus échoue, une erreur est généré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

Sinon, lancez

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

Étape 5: Vérifiez 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 du groupe ssl-cert . Exécutez le code ci-dessous pour résoudre le problème du groupe d'utilisateurs et corrigez les autorisations

#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 postgres restart
    
réponse donnée Noushad PP 16.04.2018 - 16:44
la source
0

J'ai eu exactement le même problème que Peter Eisentraut a décrit. En utilisant la commande netstat -nlp | grep 5432 , j'ai pu voir que le serveur écoutait le socket /tmp/.s.PGSQL.5432 .

Pour corriger cela, éditez simplement votre fichier postgresql.conf et changez les lignes suivantes:

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

Exécutez maintenant service postgresql-9.4 restart (remplacez 9-4 par votre version), et les connexions distantes devraient fonctionner maintenant.

Maintenant, pour autoriser les connexions locales, créez simplement un lien symbolique vers le répertoire /var/run/postgresql .

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

N'oubliez pas de vous assurer que votre pg_hba.conf est correctement configuré.

    
réponse donnée Justin Lessard 20.11.2015 - 17:44
la source
0

Dans mon cas, tout ce que j'avais à faire était ceci:

sudo service postgresql restart

puis

sudo -u postgres psql

Cela a bien fonctionné. J'espère que cela aide. Cheers :).

    
réponse donnée Pranay Dugar 29.06.2017 - 19:21
la source
0

J'ai trouvé que la désinstallation de Postgres semblait peu convaincante. Cela aide à résoudre mon problème:

  1. Démarrer 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 DigitalOcean Ici.

    
réponse donnée parlad neupane 01.02.2018 - 16:45
la source
0

Peut-être que cela a pu se produire parce que vous avez modifié les autorisations du dossier /var/lib/postgresql/9.3/main .

Essayez de le changer à 700 en utilisant la commande ci-dessous:

sudo chmod 700 main
    
réponse donnée Farzin 06.11.2014 - 14:01
la source
0

Trouvez votre fichier:

sudo find /tmp/ -name .s.PGSQL.5432

Résultat:

/tmp/.s.PGSQL.5432

Connectez-vous en tant qu'utilisateur postgres:

su postgres
psql -h /tmp/ yourdatabase
    
réponse donnée Waldeyr Mendes da Silva 30.01.2017 - 16:18
la source
0

J'ai eu le même problème (sur Ubuntu 15.10 (wily)). sudo find / -name 'pg_hba.conf' -print ou sudo find / -name 'postgresql.conf' -print est vide. Avant cela, il semblait que plusieurs instances de postgresql étaient installées.

Vous avez peut-être la même chose lorsque vous voyez installé ou répertorié des problèmes de dépendance

.../postgresql
.../postgresql-9.x 

et ainsi de suite.

Dans ce cas, vous devez sudo apt-get autoremove chaque paquet 1 par 1.

Ensuite, après cela à la lettre et vous irez bien. Surtout quand il s’agit d’importer des clés et d’ajouter à la liste des sources FIRST

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Si vous n’utilisez pas wily, remplacez wily par votre version, c’est-à-dire par la sortie de lsb_release -cs

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

Et alors, ça devrait aller et pouvoir se connecter et créer des utilisateurs.

Résultat attendu:

Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data   /var/lib/postgresql/9.3/main
locale en_US.UTF-8
socket /var/run/postgresql
port   5432

Source de mes solutions (crédits)

    
réponse donnée Grmn 05.02.2016 - 17:43
la source
0

Tout en ayant le même problème, j'ai essayé quelque chose de différent:

Lancement manuel du démon postgresql:

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

J'ai donc défini une limite inférieure pour shared_buffers et max_connections dans postgresql.conf et restart le service.

Cela a résolu le problème!

Voici le journal des erreurs complet:

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.
    
réponse donnée DrFalk3n 26.06.2013 - 15:29
la source

Lire d'autres questions sur les étiquettes