Установил 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"