2016-03-15 1 views
0

Когда я использую CLI для подключения к моей базе данных, все работает нормально.Postgresql: Я могу соединиться с командной строкой, но не с узлом-postgres

psql dbname postgres 

psql спросить меня, что у меня установлен пароль (с ALTER), и я подключился.

В моем файле pg_hba.conf я получаю следующую строку:

local all    postgres        md5 

Но когда я пытаюсь то же самое, используя узел-Postgres, я всегда получаю ошибку:

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

Код Я использую basic (допустим, мой пароль - mypwd)

var pg = require('pg'); 
var conString = "postgres://postgres:[email protected]/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(); 
    }); 
}); 

У вас есть идеи?

[EDIT: Мой полный 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 
+0

Странно, но ваш код nodejs пытается подключиться к базе данных с помощью идентификатора aut-method, а не md5. Можете ли вы добавить полный pg_hba.conf к своему сообщению? –

ответ

1

Существует разница между "местным" и "локальным". Первый будет подключаться через сокет домена unix второй по tcp/ip до (обычно) 127.0.0.1

Вы должны увидеть отдельные строки в pg_hba.conf для них.

Обычно вы можете подключиться к сокету unix-домена, помещая путь (например, /var/run/postgresql/) вместо имени сервера.

1

На самом деле проблема была в файле pg_hba.conf, поскольку alexander.polomodov заметил. Я просто поменял слова «ident» на «md5» везде, и он работает. Я не понимаю, почему мне нужно поставить его в две строки:

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

Так что, если вы можете объяснить, не стесняйтесь комментировать.

+0

См. Объяснение Ричарда Хукстона. – MarAja