Node.js, ошибка PostgreSQL: нет записи pg_hba.conf для хоста

Я следую этой статье ((http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/). Я уже развернул свое приложение для heroku и в настоящее время использую express, node.js, попытаться подключиться к базе данных PostgresSQL в Heroku, которую я только что установил. Я добираюсь до самого конца статьи, и я использую команду

node myfile.js

Я получаю эту ошибку

error: no pg_hba.conf entry for host "...", user "...", database "...", ... 

Как мне начать создавать один и где в папке моего приложения я должен его поместить?

Ниже приведено полное сообщение об ошибке. Я изменил строки для IP-адреса, пользователя и базы данных, но он выглядит в основном так же, как и он.

events.js:72
    throw er; // Unhandled 'error' event
          ^
error: no pg_hba.conf entry for host "00.000.000.00", user "username", database "databasename", SSL off
at Connection.parseE (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:526:11)
at Connection.parseMessage (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:356:17)
at Socket.<anonymous> (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:105:22)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:748:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:410:10)
at emitReadable (_stream_readable.js:406:5)
at readableAddChunk (_stream_readable.js:168:9)
at Socket.Readable.push (_stream_readable.js:130:10)

Изменить: я сделал еще несколько исследований и обнаружил, что файл pg_hba.conf находится в моем

/usr/local/var/postgres 

и я добавил эту строку в файл 'pg_hba.conf'

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 host   all             all                                     trust

также попробовал

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host   all             all              0.0.0.0/0               md5

но он продолжает говорить, что нет записи для моего хоста, пользователя, базы данных и т.д.... является ли мой синтаксис "pg_hba.conf" каким-либо образом?

Ответ 1

Измените код подключения для использования ssl. Следуя вашему связанному примеру:

var conString = "pg://admin:[email protected]:5432/Employees";
var client = new pg.Client(conString);
client.connect();

становится:

var client = new pg.Client({
    user: "admin",
    password: "guest",
    database: "Employees",
    port: 5432,
    host: "localhost",
    ssl: true
}); 
client.connect();

https://github.com/brianc/node-postgres/wiki/Client#new-clientobject-config--client

Ответ 2

В случае продолжения игнорирует все ваши усилия по включению ssl, вы можете попытаться убедить pg включить ssl для всех подключений по умолчанию:

var pg = require('pg');
pg.defaults.ssl = true;

const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');

Ответ 3

Мы столкнулись с этой ошибкой при обновлении базы данных pg на heroku с уровня hobby до standard-0. Требуется SSL, но мы не установили его в нашей конфигурации.

Включить в конфигурацию при инициализации нового Sequelize (...)

"dialect": "postgres",
"dialectOptions": {
  "ssl": true
}

Этот трюк состоял в том, что опция ssl обернута в dialectOptions. найти здесь: https://github.com/sequelize/sequelize/issues/956#issuecomment-147745033

Ответ 4

Вы также можете использовать ENVIRONMENT CONFIG VARIABLE 'PGSSLMODE' для "запроса" через веб-интерфейс Heroku или CLI.

Случай: Postgres dB настроен как дополнение к Heroku и прикреплен к приложению на Dyno Heroku.

Heroku предоставляет довольно хорошую поддержку в отношении подключения к одной из своих дополнительных баз данных; однако, к сожалению, он не учитывает (или, я пропустил это), какое-либо упоминание о том, что делать, чтобы обеспечить соблюдение SSL, поскольку все уровни уровня Heroku dB, начинающиеся с Standard-0, принудительно применяют SSL по умолчанию.

Ответ 5

То, что работало для меня, было комбинацией вышеупомянутых ответов и комментария (от @schybo)

let cloud_config = {
  username: process.env.DB_USERNAME,
  database: process.env.DB_DATABASE,
  password: process.env.DB_PASSWORD,
  host: process.env.DB_HOSTNAME,
  port: 5432,
  ssl: true,
  dialect: 'postgres',
  dialectOptions: {
    "ssl": {"require":true }
  }
};

Используйте как ssl: true, и dialectOptions: { "ssl": {"require":true }}

Прокомментируйте проблему Sequelize, которая также добавлена в документы.

Ответ 6

Просто добавьте флаг для инициализации клиента:

+ Изменить

const conString = "pg://admin:[email protected]:5432/Employees"
const client = new pg.Client(conString);
client.connect();

к

const conString = "pg://admin:[email protected]:5432/Employees"
const client = new pg.Client({
  connectionString: process.env.DATABASE_URL,
  ssl: true
});
client.connect();

Ответ 7

настройка ssl: true у меня сработала

let pg = require('pg');

let pgClient = new pg.Client({
    user: "admin",
    password: "guest",
    database: "Employees",
    port: 5432,
    host: "localhost",
    ssl: true
}); 
pgClient.connect();