J'ai un utilisateur avec un mot de passe correspondant à celui spécifié dans database.yml
postgres=# select * from pg_user
;
usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig
------------+----------+-------------+----------+-----------+---------+----------+----------+-----------
goodsounds | 16386 | t | t | t | t | ******** | |
postgres | 10 | t | t | t | t | ******** | |
(2 rows)
C'est l'erreur
funkdified@vizio ~/Rails_projects/goodsounds.org $ rake db:create
FATAL: Peer authentication failed for user "goodsounds"
Voici mon pg_hba.conf:
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#Host replication postgres 127.0.0.1/32 trust
#Host replication postgres ::1/128 trust
Auparavant, la "confiance" ci-dessus était md5 mais j'ai changé pour voir si cela aiderait.
Voici mon database.yml:
# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
# gem install pg
# On Mac OS X with macports:
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
adapter: postgresql
encoding: unicode
database: goodsounds_development
pool: 5
username: goodsounds
password: test
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
Host: localhost
port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# The server defaults to notice.
#min_messages: warning
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: postgresql
encoding: unicode
database: goodsounds_test
pool: 5
username: goodsounds
password: test
production:
adapter: postgresql
encoding: unicode
database: goodsounds_production
pool: 5
username: goodsounds
password: test
"Authentification par les pairs" signifie qu'il utilise un socket Unix et attend de l'utilisateur unix connecté que son nom d'utilisateur soit identique à celui de postgresql.
Puisque votre nom d'utilisateur unix local est funkdified
et que vous essayez de vous connecter en tant qu'utilisateur goodsounds
via une connexion socket de domaine Unix (local
) où votre pg_hba.conf
spécifie l'authentification peer
, Pg refuse correctement votre tentative de connexion.
C'est le comportement par défaut pour de nombreuses installations lors de l'utilisation de sockets unix.
Vous pouvez:
pg_hba.conf
pour utiliser md5
authentification par mot de passe au lieu de peer
authentification pour les sockets unix (local
type de connexion) afin que Pg accepte l'authentification par mot de passe; ouVoir la documentation pour pg_hba.conf
et le reste du chapitre sur l’authentification du client de la documentation .
Notez que les modifications apportées à pg_hba.conf
ne prennent pas effet immédiatement, vous devez redémarrer ou au moins recharger PostgreSQL pour le relire pg_hba.conf
.
Oh, aussi, si vous avez plusieurs versions de PostgreSQL installées, vous pouvez avoir un libpq d’une version et un serveur d’une autre. Dans ce cas, assurez-vous que l'emplacement du socket Unix auquel libpq se connecte par défaut est identique à celui du serveur unix_socket_directories
ou remplacez-le par (par exemple) Host=/tmp
dans votre chaîne de connexion.
J'étais confronté au même problème sur la machine Ubuntu, j'ai donc supprimé cette erreur en suivant certaines étapes. Basculer vers l'utilisateur postgres
$ Sudo su - postgres
il vous demandera un mot de passe et le mot de passe par défaut est postgres
Après avoir basculé l'utilisateur sur postgres, ouvrez la console psql
$ psql
alors vérifiez la version de postgres si plusieurs versions sont disponibles
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Maintenant ouvert postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1
est la version supérieure du formulaire de commande
et remplacer
local all postgres peer
à
local all postgres md5
Sudo service postgresql restart
J'écris aussi des étapes sur mon blog
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
Si "l'authentification par les pairs" ne fonctionne pas, essayez l'authentification md5.
Pour spécifier l'hôte, essayez quelque chose comme ceci:
psql -d <dbname> -U <username> -h <hostname>
ou ca:
psql -d <dbname> -U <username> -h <hostname> -W
éditez /etc/postgresql/9.3/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all peer
changer en dessous de la ligne et cela fonctionne pour moi
# "local" is for Unix domain socket connections only
local all all md5