49

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

localhost:5432:somedb:someuser:somepass

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

mkdir directory
pg_dump somedb > directory/somefile.dump

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

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

4

6 に答える 6

33
  1. コンテンツを含む .pgpass ファイルを作成する

ホスト:5432:somedb:someuser:somepass

  1. 権限を設定する

sudo chmod 600 .pgpass

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

sudo chown login_username:login_username .pgpass

  1. PGPASSFILE 環境変数を設定します。

export PGPASSFILE='/home/user/.pgpass'

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

psql -h ホスト -U someuser somedb

パスワードの入力を求めるプロンプトは表示されず、postgresql にログインしました。

于 2018-05-28T09:36:55.577 に答える
16

psql( startup.c ) がPQconnectdbParams( fe-connect.c ) を呼び出し、次にpasswordFromFile呼び出されます。以下は、pgpass ファイルが使用されることを確認するためのチェックリストです。

  1. フラグ--password/-Wおよび接続文字列が設定password=されていないことを確認してください。そうしないと、pgpass ファイルは使用されません。
  2. 環境変数PGPASSWORDが設定されていないことを確認してください ( echo $PGPASSWORD)。そうしないと、pgpass ファイルは使用されません。
  3. pgpassファイルが正しい場所($PGPASSFILEまたはデフォルト~/.pgpassまたは%APPDATA%\postgresql\pgpass.conf)にあることを確認してください
  4. chmod 600 ~/.pgpassパスファイルがグループまたはその他 (例: )によって読み取り、書き込み、または実行可能でないことを確認してください。それ以外の場合psqlは、警告が出力されます。
  5. パスファイルがファイル (シンボリックリンクではない) であることを確認してください。それ以外の場合psqlは、警告が出力されます。
  6. パスファイルがユーザーによって読み取り可能であることを確認してくださいpsql(例: cat ~/.pgpass)。それ以外の場合psql、警告なしに無視されます。ユーザーが所有していること、およびすべての祖先ディレクトリがユーザーによって実行可能であることを確認してください。
  7. pgpass ファイルの形式が正しいことを確認してくださいhostname:port:database:username:password(パスワード ファイル) passwordFromFile。各フィールド (パスワード以外) は*. :andの文字は(パスワードであっても)エスケープ\する必要があります。パスワードは行末または行末で終わり、、、、または以外の任意のバイトを含めることができます。正しくフォーマットされていない行、またはホストとユーザーが一致しない行は、コメントであるかのように警告なしで無視されます。\:\\:\r\n\0
  8. pgpass ファイル内の行のホスト名、ポート、データベース名、ユーザー名がサーバーと一致するか、*. チェックされるサーバーの「pwhost」は、host空でない場合は名前、またはhostaddrIP アドレスです。それ以外の場合、行は警告なしで無視されます。

残念ながら、これらのファイルにはログが記録されないため、これで問題が解決しない場合は、自分でコンパイルしてデバッガで実行する必要がありpsqlますlibpq

于 2019-05-07T17:10:43.370 に答える
5

.pgpass ファイルの所有者を確認してください。.pgpass ファイルを sudo で作成したことを知るために、30 分も無駄になりました。ユーザーと場所のコマンドはchown postgres:postgres /var/lib/pgsql/.pgpass.

于 2018-02-07T15:33:36.887 に答える
0

私の場合、すでにPGPASSWORD環境変数を(間違ったパスワードに)設定していたので、psql中身の代わりにそれを選んでいました.pgpass

于 2021-10-01T19:32:34.437 に答える