同じ問題に直面していて、ここにある回答のさまざまな部分とグーグルの試行からの他の発見を組み合わせた後にのみ解決策を見つける人として、うまくいけば完全な回答をまとめることにしました。
最初に注意すること:
それを入れること'HOST'
も省略することも、settings.py
実行可能なオプションです。ただし、配置するかどうかは'HOST'
、postgresql 構成のセットアップ方法に影響します。
joerick's answer の'HOST'
ように省略すると、psycopg2が Unix ドメイン ソケットで接続しようとします。一方、構成にキーが含まれている場合、psycopg2 は IPv4/6 経由で接続を試みます。postgresql 認証構成 ( ) はこれらの接続方法のいずれかに固有であるため、これは大きな違いを生みます。'HOST'
localhost
/etc/postgresql/x.x/main/pg_hba.conf
お持ち帰りメッセージ:
postgresql 認証構成でも構成した接続タイプを必ず選択してください。
2 つ目の注意事項:
postgresql 認証構成 ( /etc/postgresql/x.x/main/pg_hba.conf
) では、エントリの順序が考慮されます。
ドキュメントは実際にはこれについて非常に明確です(それでも私はなんとか罠に陥りましたlocal all all peer
):
接続タイプ、クライアント アドレス、要求されたデータベース、およびユーザー名が一致する最初のレコードが、認証の実行に使用されます。「フォールスルー」や「バックアップ」はありません。1 つのレコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。一致するレコードがない場合、アクセスは拒否されます。
お持ち帰りメッセージ:
特定のルールは、より広範なルールの前に来るようにしてください。
これですべてがわかったので、パスワードを使用せずにアクセスする方法を次に示します'HOST'
localhost
。
接続オーバーlocalhost
'HOST': 'localhost'
のデータベース構成で次を指定しますsettings.py
。
# ...
'HOST': 'localhost',
# ...
'PASSWORD'
は不要であり、省略できます。
postgresql 認証設定 ( ) で設定する必要があるルール/etc/postgresql/x.x/main/pg_hba.conf
は TYPE 用host
です。
ルールの順序に注意してください。したがって、パスワードなしでデータベース「my_database」にアクセスできるユーザー「my_user」がいる場合、正しい構成は次のようになります。
# RIGHT WAY...
host my_database my_user 127.0.0.1/32 trust
host my_database my_user ::1/128 trust
# ...
host all all 127.0.0.1/32 peer
# ...
順序を逆にすると、no password supplied
エラーが発生します。
Unix ドメイン ソケットを介した接続
'HOST'
設定にキーを
入れないでください。'PASSWORD'
も必要ありません。
postgresql 認証構成では、Unix ドメイン ソケット経由のアクセスは TYPE のルールで管理されますlocal
。
「my_user」がデータベース「my_database」への信頼できる (パスワードは不要) アクセスを取得する必要がある場合は、次のような行が必要です。
local my_database my_user trust
この行をどこに置くかに関して、ここでの規則は、とに関してより広い規則の前に置く必要があるということです。安全のため、先頭に置くことをお勧めします。ファイルが次のようになっている場合:DATABASE
USER
/etc/postgresql/x.x/main/pg_hba.conf
pg_hba.conf
# RIGHT WAY...
local my_database my_user trust
# ...
local all all peer
# ...
パスワードなしで問題ありません。ただし、次のようになっている場合:
# WRONG WAY! ...
local all all peer
# ...
local my_database my_user trust
# ...
パスワードを入力する必要があります。
最後の注意:
の変更後、postgresql サービスを再起動することを忘れないでください/etc/postgresql/x.x/pg_hba.conf
。
sudo service postgresql restart
これがお役に立てば幸いです。ハッピーコーディング!