d'erreur: “connexions de socket de domaine Unix ”/var/run/postgresql/.s.PGSQL.5432“?” lorsque vous essayez de créer un utilisateur avec postgresql sur centos
erreur complet:
Creating 'pcore' PostgreSQL user... 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"?
Connecting to PostgreSQL as 'pcore'...
** Error occurred during execution: FATAL: Ident authentication failed for user "pcore"
postgresql:
psql -U postgres template1
psql (8.4.9)
Type "help" for help.
template1=# \l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
: postgres=CTc/postgres
(3 rows)
linux:
lsb_release -a
LSB Version: :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 5.7 (Final)
Release: 5.7
Codename: Final
aussi:
ps -ef | grep post
user 25055 25032 0 11:13 pts/1 00:00:00 grep post
postgres 32104 1 0 Jan20 ? 00:00:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
Aucun utilisateur n'est pcore dans /etc/passwd
Peut-être cela le problème, que postgresql s'attend à une à une correspondance entre les utilisateurs de linux et des utilisateurs de postgresql ?
Je suis en train de créer un utilisateur lorsque cette erreur se produit:
# Database imports
import pgdb as psql
# This will create the 'pcore' user using `su` to run the
# command as the postgres system user
def createPsqlPcoreUser(new_pass):
print "Creating 'pcore' PostgreSQL user...",
sys.stdout.flush()
cmd_list = ['su', '-', 'postgres', '-c','psql --host=%s -c '\
'"CREATE USER pcore WITH PASSWORD \'%s\' CREATEDB"' % \
(PSQL_SOCKET_PATH, new_pass)]
p1 = subprocess.Popen(cmd_list,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p1.wait()
print p1.communicate()[0]
En outre:
sudo -u postgres createuser pcore -P
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y
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 "/tmp/.s.PGSQL.5432"?
[root@localhost pcore]# service postgresql status
postmaster (pid 28901 28900 28899 28898 28896 28894) is running...
[root@localhost pcore]# ps -ef | grep post
postgres 28894 1 0 00:21 ? 00:00:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres 28896 28894 0 00:21 ? 00:00:00 postgres: logger process
postgres 28898 28894 0 00:21 ? 00:00:00 postgres: writer process
postgres 28899 28894 0 00:21 ? 00:00:00 postgres: wal writer process
postgres 28900 28894 0 00:21 ? 00:00:00 postgres: autovacuum launcher process
postgres 28901 28894 0 00:21 ? 00:00:00 postgres: stats collector process
- La première erreur: une application tente de créer un (postgres) de l'utilisateur, mais ne peut pas se connecter. La deuxième erreur est: application tente de se connecter en tant qu'utilisateur non existant.
- Qu'avez-vous exécuter qui a produit l'erreur ?
- annexé à la question, en raison du manque de mise en forme dans la section des commentaires
- je pense que cela a à voir avec PGDATA , n'étant pas à l'endroit prévu
- Il y a une contradiction évidente entre le premier message d'erreur répertorié et la dernière erreur (sous en plus). Cela souligne qu'il y ait de la difficulté à localiser le socket Unix. La première est à la recherche d'un socket
/var/run/postgresql/.s.PGSQL.5432
et la deuxième/tmp/.s.PGSQL.5432
. De vérifier où cela est censé être trouvés par la recherche pour le champ "unix_socket_directory" dans postgresql.conf (probablement situé dans /etc/postgresql/<version>/<cluster>/). Ensuite, vérifiez qu'il est en fait en faisant unls -lA socket_dir
.
Vous devez vous connecter pour publier un commentaire.
Fascinant d'erreur. Il ressemble à votre utilisateur capable de se connecter à sockets correctement, mais l'utilisateur postgres ne l'est pas. Je trouve cela très étrange. Ma conjecture est qu'il ya quelque chose de mal avec le profil de l'utilisateur postgres.
où je recommanderais de commencer est avec un printenv à la fois comme utilisateur normal et l'utilisateur postgres et de les comparer. En particulier regarder PGPORT et PGHOST variables que ceux-ci peuvent déterminer l'emplacement du connecteur. C'est le premier endroit pour commencer.
D'autre part, vous pouvez vérifier l'postgresql.conf pour le socket répertoire et définir PGHOST le chemin absolu d'un répertoire. Qui serait susceptible de résoudre votre problème, mais quelque chose s'est foiré sur le compte d'utilisateur sur votre système.