web-dev-qa-db-ja.com

postgresql:.pgpassが機能しない

次のような.pgpassファイルをホームディレクトリに作成しました

localhost:5432:somedb:someuser:somepass

私はディレクトリを作成し、そこにsomedbのpg_dumpを配置するシェルスクリプトを使用しています。

mkdir directory
pg_dump somedb > directory/somefile.dump

それでもパスワードの入力を求められます。

ここの間違いはどこですか?

30

ホストとユーザーを指定してみましたか?

pg_dump -U someuser -h localhost somedb > directory/somefile.dump
25
devnull

質問への回答は既に完了していますが、.pgpassファイルの権限が適切に設定されていない場合もあります。世界とグループのアクセスを禁止する必要があります。

/bin/chmod 0600 ~/.pgpass
20
Nacho Mezzadra

1)内容を含む.pgpassファイルを作成する

ホスト:5432:somedb:someuser:somepass

2)コマンドを使用して権限を設定する

Sudo chmod 600 .pgpass

3)ファイル所有者を、ログインに使用したのと同じユーザーとして設定します。

Sudo chown login_username:login_username .pgpass

4)PGPASSFILE環境変数を設定します。

pGPASSFILE = '/ home/user/.pgpass'をエクスポートします

次に、データベースに接続して確認します。

psql -hホスト-U someuser somedb

パスワードの入力を求められず、postgresqlにログインしません。

8
Shrinivas

.pgpassファイルの所有者を確認してください。私がSudoで.pgpassファイルを作成したことを確認するために、ちょうど30分を失った。ユーザーと場所のコマンドはchown postgres:postgres /var/lib/pgsql/.pgpass

5
Jonathan

psqlstartup.c )呼び出し PQconnectdbParamsfe-connect.c )、次に passwordFromFile が呼び出されます。次に、pgpassファイルが使用されることを確認するためのチェックリストを示します。

  1. 接続文字列 のフラグ--password/-Wおよびpassword=が設定されていないことを確認します。そうでない場合、pgpassファイルは使用されません。
  2. 環境変数PGPASSWORDが設定されていないことを確認してください(echo $PGPASSWORD)。そうでない場合、pgpassファイルは使用されません。
  3. pgpass file が正しい場所にあることを確認してください($PGPASSFILEまたはデフォルト~/.pgpassまたは%APPDATA%\postgresql\pgpass.conf
  4. パスファイルがグループやその他のユーザーによって読み取り、書き込み、または実行できないことを確認してください(例:chmod 600 ~/.pgpass);そうでない場合、psqlは警告を出力します。
  5. Passfileがファイル(symlinkではない)であることを確認してください。そうでない場合、psqlは警告を出力します。
  6. パスファイルがpsqlユーザー(例:cat ~/.pgpass)によって読み取り可能であることを確認してください。それ以外の場合、psqlは警告なしに無視します。それがユーザーによって所有されていること、およびそのすべての祖先ディレクトリーがユーザーによって実行可能であることを確認してください。
  7. Pgpassファイルの行のホスト名、ポート、dbname、ユーザー名がサーバーと一致しているか、または*であることを確認してください。チェックされるサーバーの「pwhost」は、空でない場合はHost名、またはhostaddr ipアドレスです。それ以外の場合、ファイルは警告なしに無視されます。

残念ながら、これらのファイルにはログが記録されないため、これが役に立たない場合は、psqllibpqを自分でコンパイルし、デバッガーで実行する必要があります。

3
yonran