web-dev-qa-db-ja.com

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を使用して、インストールした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」構文は何らかの方法で間違っていますか?

23
stcho

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

46
aembke

Sequelizeがsslをオンにするためのすべての努力を無視する場合、デフォルトですべての接続に対してsslを有効にするようにpgを説得することができます。

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

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

Herokuのpgデータベースをhobby層からstandard-0にアップグレードしているときに、このエラーに遭遇しました。 SSLは必須ですが、構成で設定していません。

新しいSequelize(...)を初期化するときに構成に含める

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

このトリックは、sslオプションがdialectOptionsでラップされていることでした。ここにあります: https://github.com/sequelize/sequelize/issues/956#issuecomment-1477450

12
Simon Franzen

環境構成変数「PGSSLMODE」を使用して、HerokuのWebインターフェースまたはCLIから「要求」することもできます。

ケース:Postgres dBがHerokuアドオンとして設定され、Heroku Dynoのアプリに接続されています。

Herokuは、アドオンデータベースの1つに接続する方法について、かなり良いサポートを提供しています。ただし、Standard-0で始まるすべてのHeroku dB層はデフォルトでSSLを実施するため、残念ながら、SSLを実施する方法についての言及はありません(または、見逃しました)。

6
tabish89

私のために働いたのは、上記の回答とコメントの組み合わせでした(@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の問題について。ドキュメントにも追加されています。

3
rahuljain1311

?ssl=trueの追加は、URIの最後まで機能するはずです。

var conString = "pg://admin:guest@localhost:5432/Employees?ssl=true";
1
Openwell

クライアントの初期化にフラグを追加するだけです。

変化する

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

設定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
    }
0
Álvaro Agüero