Postgresql:我可以用命令行连接但不能用node-postgres连接

时间:2016-03-15 12:49:07

标签: node.js postgresql node-postgres

当我使用CLI连接到我的数据库时,一切正常。

psql dbname postgres

psql问我之前设置的密码(使用ALTER),然后我就连接了。

在我的pg_hba.conf文件中,我得到以下行:

local   all             postgres                                md5

但是当我使用node-postgres尝试相同的事情时,我总是会收到错误:

could not connect to postgres { [error: Ident authentication failed for user "postgres"]

我使用的代码是基本的(假设我的密码是mypwd)

var pg = require('pg');
var conString = "postgres://postgres:mypwd@localhost/database";

var client = new pg.Client(conString);
client.connect(function(err) {
  if(err) {
    return console.error('could not connect to postgres', err);
  }
  client.query('SELECT NOW() AS "theTime"', function(err, result) {
    if(err) {
      return console.error('error running query', err);
    }
    console.log(result.rows[0].theTime);
    //output: Tue Jan 15 2013 19:12:47 GMT-600 (CST)
    client.end();
  });
});

你有什么想法吗?

[编辑:我的完整pg_hba.conf]

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             postgres                                md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

2 个答案:

答案 0 :(得分:1)

“local”和“localhost”之间存在差异。第一个将通过unix域套接字连接,第二个通过tcp / ip连接到(通常)127.0.0.1

您应该在pg_hba.conf中看到单独的行。

您通常可以通过放置路径(例如/var/run/postgresql/)来代替服务器名称来连接到unix域套接字。

答案 1 :(得分:1)

实际上,问题是在pg_hba.conf文件中,正如alexander.polomodov注意到的那样。我只是用“md5”改变了“ident”字样到处都有效。我不明白为什么我需要把它放在两行中:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

因此,如果您可以解释,请随时发表评论。