ホスト変数PGPASSWORD
と.pgpass
を使用してみましたが、これら2つのどちらもデータベースに対する認証を許可しません。適切な許可にchmod
'_.pgpass
し、また試してみました:
export PGPASSWORD=mypass and PGPASSWORD=mypass
パスワードには\
が含まれていますが、一重引用符PGPASS='mypass\'
で囲んでおり、それでも認証されません。
私は走っています:
pg_dump dbname -U username -Fc
そして私はまだ受け取ります
pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username"
クイックソリューション
問題は、現在のユーザー名に基づいてローカル peer
認証を実行しようとしていることです。パスワードを使用する場合は、-h
でホスト名を指定する必要があります。
pg_dump dbname -U username -h localhost -F c
説明
これは、 pg_hba.conf
の次のことが原因です。
local all all peer
Host all all 127.0.0.1/32 md5
これは、Postgresユーザー名が現在のシステムユーザー名と一致することを要求するローカルユーザーに対してpeer
認証を使用するようにPostgresに指示します。 2行目は、ホスト名を使用した接続を示し、 md5
メソッドを介してパスワードで認証できるようにします。
私の好みの開発構成
[〜#〜] note [〜#〜]:これは、シングルユーザーワークステーションでのみ使用する必要があります。これにより、実稼働マシンまたはマルチユーザーマシンで重大なセキュリティ脆弱性が発生する可能性があります。
ローカルのpostgresインスタンスに対して開発する場合、ローカル認証方法を trust
に変更したいです。これにより、パスワードを持たないすべてのユーザーとして、ローカルUNIXソケットを介してpostgresに接続できます。上記のpeer
をtrust
に変更し、postgresをリロードするだけで実行できます。
# Don't require a password for local connections
local all all trust