私はこの記事をフォローしています(( http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/ )。私はすでにherokuにアプリをデプロイしており、現在Express、node.jsを使用して、インストールしたHerokuのPostgresSQLデータベースに接続しようとしています。記事の最後に到達し、コマンドを使用します
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」構文は何らかの方法で間違っていますか?
SSLを使用するように接続コードを変更します。あなたのリンクされた例に従ってください:
var conString = "pg://admin:guest@localhost: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
Sequelizeがsslをオンにするためのすべての努力を無視する場合、デフォルトですべての接続に対してsslを有効にするようにpgを説得することができます。
var pg = require('pg');
pg.defaults.ssl = true;
const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');
Herokuのpgデータベースをhobby
層からstandard-0
にアップグレードしているときに、このエラーに遭遇しました。 SSLは必須ですが、構成で設定していません。
新しいSequelize(...)を初期化するときに構成に含める
"dialect": "postgres",
"dialectOptions": {
"ssl": true
}
このトリックは、sslオプションがdialectOptions
でラップされていることでした。ここにあります: https://github.com/sequelize/sequelize/issues/956#issuecomment-1477450
環境構成変数「PGSSLMODE」を使用して、HerokuのWebインターフェースまたはCLIから「要求」することもできます。
ケース:Postgres dBがHerokuアドオンとして設定され、Heroku Dynoのアプリに接続されています。
Herokuは、アドオンデータベースの1つに接続する方法について、かなり良いサポートを提供しています。ただし、Standard-0で始まるすべてのHeroku dB層はデフォルトでSSLを実施するため、残念ながら、SSLを実施する方法についての言及はありません(または、見逃しました)。
私のために働いたのは、上記の回答とコメントの組み合わせでした(@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の問題について。ドキュメントにも追加されています。
?ssl=true
の追加は、URIの最後まで機能するはずです。
var conString = "pg://admin:guest@localhost:5432/Employees?ssl=true";
クライアントの初期化にフラグを追加するだけです。
変化する
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();
設定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();
追加する必要があります
ssl: true
jSON接続で
{
Host: 'myHost.com',
user: 'myUser',
password: 'myPassword',
database: 'myDb',
port: 5432,
ssl: true
}