我的用户密码与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)
这是错误
funkdified@vizio ~/rails_projects/goodsounds.org $ rake db:create
FATAL: Peer authentication failed for user "goodsounds"
这是我的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
以前"信任"上面是md5,但我改变了看看是否会有所帮助。
这是我的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
答案 0 :(得分:91)
“对等身份验证”表示它正在使用unix套接字并期望连接的unix用户具有与postgresql用户名相同的unix用户名。
由于您的本地unix用户名为funkdified
,并且您尝试以goodsounds
指定local
的unix域套接字(pg_hba.conf
)连接作为用户peer
进行连接{1}}身份验证,Pg正确拒绝您的连接尝试。
这是使用unix套接字时许多安装的默认行为。
你可以:
pg_hba.conf
使用md5
密码验证而不是peer
验证unix套接字(local
连接类型),以便Pg接受密码验证;或请参阅the docs for pg_hba.conf
以及client authentication chapter of the documentation的其余部分。
请注意,对pg_hba.conf
的更改不会立即生效,您必须重新启动或至少重新加载PostgreSQL才能重新读取pg_hba.conf
。
哦,如果你安装了多个PostgreSQL版本,你可能有一个版本的libpq和另一个版本的服务器。在这种情况下,请确保默认情况下libpq连接到的unix套接字的位置与服务器的unix_socket_directories
相同,或者在连接字符串中用(例如)host=/tmp
覆盖它。
答案 1 :(得分:16)
我在Ubuntu机器上遇到同样的问题,所以我按照一些步骤删除了这个错误。 切换到postgres用户
$ sudo su - postgres
它将要求输入密码,默认密码为postgres
将用户切换到postgres后,打开psql console
$ psql
如果有多个版本可用,请检查postgres的版本
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
现在打开postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1
是版本返回表单上层命令
并替换
local all postgres peer
到
local all postgres md5
sudo service postgresql restart
我也在我的博客上写了一些步骤
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
答案 2 :(得分:10)
如果"对等身份验证#34;不起作用,请尝试md5身份验证。
要指定主机,请尝试以下操作:
psql -d <dbname> -U <username> -h <hostname>
或者这个:
psql -d <dbname> -U <username> -h <hostname> -W
答案 3 :(得分:1)
编辑/etc/postgresql/9.3/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all peer
更改为以下行,它适用于我
# "local" is for Unix domain socket connections only
local all all md5
答案 4 :(得分:0)
这是我的解决方法;
运行以下命令以确认您的PostgreSQL版本。
psql --version
导航到服务器上的 PostgreSQL 配置目录,该目录位于/etc/postgresql/10/main
中。请注意,10
是我的服务器上 PostgreSQL 安装的版本。您的版本可能是9.5
,11
或12
或任何其他版本。
cd ~
cd /etc/postgresql/10/main
导航到/etc/postgresql/10/main
目录后,使用以下命令打开文件pg_hba.conf
。该文件控制:允许连接哪些主机,如何验证客户端,可以使用哪些PostgreSQL用户名,可以访问哪些数据库:
sudo nano pg_hba.conf
在下面替换以下行:
# Database administrative login by Unix domain socket
local all postgres peer
在下面的行:
# Database administrative login by Unix domain socket
local all postgres md5
此外,替换以下行:
# "local" is for Unix domain socket connections only
local all all peer
在下面的行:
# "local" is for Unix domain socket connections only
local all all md5
此外,我们可能希望允许进入生产环境中的PostgreSQL数据库的入站连接(以允许使用md5方法从所有数据库,所有用户,所有地址进行主机连接)。
要实现此目的,请在文件末尾添加以下行,然后保存文件:
# remote connections
host all all all md5
仍然在/etc/postgresql/10/main
目录中,使用以下命令打开并编辑文件postgresql.conf
:
sudo nano postgresql.conf
用下面的行替换行# listen_address='127.0.0.1'
或行listen_address='127.0.0.1'
或行# listen_address='localhost'
或行listen_address='localhost'
到下面的行,以允许PostgreSQL数据库监听连接来自所有地址:
listen_addresses = '*'
保存文件,然后导航到服务器的根目录:
cd ~
使用以下命令重新启动或重新加载PostgreSQL服务器:
sudo systemctl restart postgresql # To restart
sudo systemctl reload postgresql # To reload