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?
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
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://...');
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.
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
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();