无法访问Postgres文件pg_hba.conf。

11

当我运行db:create时,出现了以下错误:

FATAL:  Peer authentication failed for user "wandrr"
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `new'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `connect'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:326:in `initialize'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in checkout'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `loop'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `block in checkout'
/home/jack/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:239:in `checkout'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:102:in `block in connection'
/home/jack/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:101:in `connection'
/home/jack/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
....Edit out 40 more of these warnings...
/home/jack/.rvm/gems/ruby-1.9.3-p327/bin/ruby_noexec_wrapper:14:in `eval'
/home/jack/.rvm/gems/ruby-1.9.3-p327/bin/ruby_noexec_wrapper:14:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"wandrr_test", "pool"=>5, "username"=>"wandrr", "password"=>nil}

我发现我需要编辑pg_hba.conf文件。问题是它无法打开,一直提示我没有权限使用该文件。那么如何获取权限呢?我正在运行Ubuntu 12.10、Rails 1.9.3和Postgres 9.1。

1
你尝试使用sudo编辑它了吗:sudo vi pg_hba.conf - Trent Earl
1
嗯...什么也没有显示出来。我以为它应该填满文本? - Jakxna360
我的也是空的。可能是其他问题。你能从命令行登录吗? - Trent Earl
我在使用gedit打开时成功编辑了它。也许只是文本编辑器的问题? - Jakxna360
1
@JackJenkins 如果您没有指定路径,且当前目录不是 pg_hba.conf 的位置,则 sudo vi pg_hba.conf 将尝试在当前目录(可能是您的主文件夹)中打开 pg_hba.conf,未找到它,并开始编辑一个将在保存时创建的新文件。 您需要指定完整路径,例如对于从 Ubuntu 包安装的 Pg,请使用 sudo vi /etc/postgresql/9.1/main/pg_hba.conf。 要获取路径,请在 psql 中使用 SHOW hba_file; - Craig Ringer
3个回答

31

首先记录下您系统上pg_hba.conf的位置。如果您不知道它在哪里,但可以连接到Pg,请使用PgAdmin-III或psql连接到Pg并运行以下命令:

SHOW hba_file;

要获取 pg_hba.conf 的位置。它的位置非常标准; 在Ubuntu上,它将在 /etc/postgresql/[major.minor]/main/pg_hba.conf 中,例如 /etc/postgresql/9.1/main/pg_hba.conf。在大多数其他发行版中,它将位于 /var/lib/pgsql//var/lib/postgresql 下,直接或在版本化目录中。
要编辑此文件,您必须指定完整路径或首先更改到其位置的目录。例如:
sudo vi /etc/postgresql/9.1/main/pg_hba.conf

如果您喜欢更友好的文本编辑器:

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

或将"nano"替换为您喜欢的编辑器,比如gedit

一旦保存更改,请记得重新加载PostgreSQL服务以使其生效。在Ubuntu上,您可以执行以下操作:

pg_ctlcluster 9.1 main reload

当我执行 sudo gedit pg_hba.conf 命令时,我的目录中除了 pg_hba.conf 文件外还会添加一个 pg_hba.conf~ 文件。编辑 pg_hba.conf 文件的最佳方法是什么? - Connor Leech
哦,天啊!在搜索了1个半小时的解决方案后,这真的帮了我!谢谢! - Nezir

1

遵循Crag的建议效果很好。

对于他的最后一步,您需要sudo进入数据库超级用户,以便重新加载PostgreSQL服务:

sudo -u postres pg_ctlcluster 9.1 main reload

这些步骤同样适用于Debian Sid系统。

1

要编辑pg_hba.conf文件,您可以尝试使用postgres用户进行编辑:

  • 切换到postgres用户

    sudo su postgres

  • 运行psql

  • 在psql中作为查询运行SHOW hba_file;以获取位置
  • nano *文件位置*不要使用sudo nano,因为那将尝试使用root用户进行编辑操作)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接