Невозможно подключиться к PostgreSQL через узел-postgres в Ubuntu 18.04.1 LTS - PullRequest
0 голосов
/ 13 января 2019

Установил PostgreSQL, создал пользователя foo с паролем foo, базу данных foo с владельцем foo и изменил 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                                     trust
# 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     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

Я пробовал peer, md5, password вместо trust, но с модулем Node.js pg ничего не работало (хотя все опции, кроме peer, работали с psql CLI). Я также установил следующее в postgresql.conf:

listen_addresses = '*'

Кажется, что он принимает соединения на localhost:5432 (по крайней мере telnet localhost 5432 не показывает сообщение Connection refused, как с другими случайными портами). Вот пример кода JS, который использует модуль pg:

const pg = require("pg");

const main = async () => {
  const client = new pg.Client({
    user: 'foo',
    host: '127.0.0.1',
    database: 'foo',
    password: 'foo',
    port: 5432
  });
  await client.connect();
  const res = await client.query("select * from city");
  console.log(res.rows[0].message);
  await client.end();
};

main();

Это дает мне:

(node:27593) UnhandledPromiseRejectionWarning: error: password authentication failed for user "foo"

UPD: psql успешно подключается, только если хост и порт не переданы в качестве параметров. psql -h localhost -p 5432 -U foo не удается с psql: FATAL: password authentication failed for user "foo"

...