web-dev-qa-db-fra.com

Node.js, erreur PostgreSQL: pas d'entrée pg_hba.conf pour l'hôte

Je suis cet article (( http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/ ) J'ai déjà déployé mon application sur heroku et j'utilise actuellement express, node.js pour essayer de me connecter à une base de données PostgresSQL dans Heroku que je viens d'installer. J'arrive à la toute fin de l'article et j'utilise la commande 

node myfile.js

Je reçois cette erreur

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

Comment puis-je en créer un et où dois-je le placer dans mon répertoire d'applications?

Vous trouverez ci-dessous le message d'erreur complet. J'ai changé les chaînes pour l'adresse IP, l'utilisateur et la base de données, mais cela ressemble fondamentalement à ça. 

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)

Edit: j'ai fait quelques recherches supplémentaires et a constaté que le fichier 'pg_hba.conf' est dans mon 

/usr/local/var/postgres 

et j'ai ajouté cette ligne dans le fichier 'pg_hba.conf'

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 Host   all             all                                     trust

aussi essayé

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

mais il continue à dire qu'il n'y a pas d'entrée pour mon hôte, utilisateur, base de données, etc ... ma syntaxe 'pg_hba.conf' est-elle erronée?

14
stcho

Changez votre code de connexion pour utiliser ssl. En suivant votre exemple lié:

var conString = "pg://admin:guest@localhost:5432/Employees";
var client = new pg.Client(conString);
client.connect();

devient:

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

26
aembke

Dans le cas où la suite ignore tous vos efforts pour activer SSL, vous pouvez essayer de convaincre pg d'activer SSL pour toutes les connexions par défaut:

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

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

Vous pouvez également utiliser la variable "PGSSLMODE" de CONFIGURATION ENVIRONNEMENTALE pour "exiger" via l'interface Web ou l'interface de ligne de commande de Heroku.

Cas: Postgres dB configuré en tant qu'add-on Heroku et attaché à l'application sur un Heroku Dyno.

Heroku fournit un bon support sur la manière de se connecter à l'une de ses bases de données complémentaires. cependant, il ne mentionne malheureusement pas (ou, je l’ai manquée) aucune mention de l’application de SSL, car tous les niveaux dB Heroku commençant par Standard-0 appliquent SSL par défaut.

4
tabish89

Nous avons rencontré cette erreur lors de la mise à niveau de la base de données pg sur heroku de hobby tier à standard-0. SSL est requis, mais nous ne l’avons pas défini dans notre configuration.

Inclure dans la configuration lors de l'initialisation du nouveau Sequelize (...)

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

Cette astuce consistait à choisir l’option ssl dans dialectOptions. trouvé ici: https://github.com/sequelize/sequelize/issues/956#issuecomment-147745033

2
Simon Franzen

Il suffit d'ajouter un drapeau à l'initialisation du client:

Changement

const conString = "pg://admin:guest@localhost:5432/Employees"
const client = new pg.Client(conString);
client.connect();

À

const conString = "pg://admin:guest@localhost:5432/Employees"
const client = new pg.Client({
  connectionString: process.env.DATABASE_URL,
  ssl: true
});
client.connect();
0
James Broad