私はsslmode = 'required'パラメータでpsycopg2を使用して自分のpostgresデータベースに接続しようとしています。しかし、私は次のエラーを受け取ります
_psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in
_
私のシステムに関するいくつかの詳細を紹介します
これは私が問題を修正するためにやろうとしたことです
brew uninstall python
_which python
_はまだpython _/usr/local/bin/python
_に住んでいるので、これをアンインストールしようとしましたができませんでした。これがpython OSを使用しており、アンインストールしないでくださいbrew install python --with-brewed-openssl --build-from-source
_pip uninstall psycopg2
_pip install psycopg2
_これをすべて実行した後も、例外は発生します。私はこれを実行していますpythonスクリプトを介して_#!/usr/bin/env python
_が重要かどうかはわかりませんが、それは_which python
_が示すディレクトリとは別のディレクトリです
Pip経由でインストールしているので、psycopg2の最新バージョン(2.6.1)を使用する必要があります。コードを少し調べたところ、postgresql-c-librariesを直接呼び出してdb-connectionを設定するconnection_int.cで例外がスローされているようです。呼び出しは次のように行われます。
self->pgconn = pgconn = PQconnectStart(self->dsn);
Dprintf("conn_connect: new postgresql connection at %p", pgconn);
if (pgconn == NULL)
{
Dprintf("conn_connect: PQconnectStart(%s) FAILED", self->dsn);
PyErr_SetString(OperationalError, "PQconnectStart() failed");
return -1;
}
else if (PQstatus(pgconn) == CONNECTION_BAD)
{
Dprintf("conn_connect: PQconnectdb(%s) returned BAD", self->dsn);
PyErr_SetString(OperationalError, PQerrorMessage(pgconn));
return -1;
}
Psycopg2.connect()への接続ステートメントで指定されたキーワードはその関数に対して処理されており、エラーはOperationalError例外として返されます。
エラーは実際にpostgresql-libで直接生成されています-使用しているバージョン、ビルド方法を確認し、可能であれば、SSLサポートを備えたバージョンにアップグレードするか、SSLを有効にしてソースからビルドし直してください。
Postgresql-docsには、sslmodeがrequire、に設定されている場合、SSLサポートがないとエラーが発生することも記載されていますverify-caまたはverify-full。参考として、sslmode
の下の here を参照してください。
postgres-website には、バイナリパッケージからpostgresをインストールするいくつかの方法がリストされているため、ニーズに合った方法を選択できます。私はOSXに慣れていないので、何がベストかについての推奨はありません。
これ の質問も役立つかもしれません。
また、psycopg2-moduleを再インストールする必要があります。再構築するときは、新しくインストールしたlibを使用してください。リンクされた質問を参照してください(つまり、pg_config
の実行時に、$ PATHへの新しいインストールに含まれるpip install psycopg2
へのパスを配置する必要があります)。
これと同じエラーが発生しました。これは、psycopg2のAnacondaバージョンを使用していたためです。それを修正するために、私は適応しました ここからのVictorFの解決策 と実行しました:
conda uninstall psycopg2
Sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/local/lib
Sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/local/lib
pip install psycopg2
次に、conda list
を実行すると、psycopg2が<pip>
とともにインストールされ、右端の列に表示されます。その後、私はPythonを再起動し、すべてがうまくいきました。
発生しているエラーはPostgres自体の問題であり、psycopg2
ではありません。
psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in
上記は、psycopg2
が組み込まれているPostgresのバージョンにSSLサポートが組み込まれていないことを示しています。実行中のPosgresサーバーにssl=require
で接続しようとすると、このエラーがスローされます。
Postgresのインストール方法については触れていませんが、Homebrewを他のものに使用しているため、Postgresも同じ方法でインストールすることをお勧めします。
$ brew update
$ brew install postgresql
postgresqlの式 は、openssl
に依存し、--with-openssl
フラグを設定してコンパイルすることを示しています。また、必要なlibpq
ヘッダーもインストールします。この手順の後でpsycopg2
を再インストールして、正しいライブラリ/バージョンを取得できるようにする必要がある場合があります。
興味深いことに、 condaに対してリストされたバグ があります。これは、psycopg2
のcondaバージョン(Homebrew postgresがインストールされているシステムにリンクされている)がインストールされていないシステムにインストールされた場合に発生する、同じエラーをリストします、SSLライブラリーが欠落していることも示唆する可能性があります。
間違ったバージョンが使用されるリスクを最小限に抑えるために、再インストールする前に既存のPostgresバージョン(Homebrew経由でインストールされたものを含む)をアンインストールすることをお勧めします。
他の人が言ったように、エラーメッセージはPostgresから来ているようです。これを確認するには、次のように入力します。_psql sslmode=require
_ pgsqlターミナルが表示された場合、sslはpostgresで機能します。エラーの場合は機能しません。
Postgresを試して削除し、opensslサポートで再インストールします。
_brew uninstall postgres
brew update
brew install postgres --with-openssl
_
または、これが私が提案する方法です。 http://postgresapp.com にワンクリックインストーラーがあります。これにより、インストールも簡単になります。サイトの指示に従って、正しくインストールしてください。
Yosemiteで実行すると、〜/ Library/Application\Support/Postgres93/varにインストールされました
証明書を作成することもできます(これは、エラーが発生している場所でもある可能性があります)。これがレジストラから発行される場合は、レジストラから公開するか、開発/テスト環境の場合は自己署名する必要があります。
_openssl req -new -text -out server.req
openssl rsa -in privkey.pem -out server.key
rm privkey.pem
openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod og-rwx server.key
_
Configディレクトリに移動します。デフォルトでは、〜/ Library/Application\Support/Postgres93/varです。
SSLサポートを有効にします。
_vim postgresql.conf
# change this:
# ssl = on
# to this:
ssl = on
_
アプリを再起動し、_psql "sslmode=require"
_でsslを確認します
それが機能する場合は、Pythonコードで試してください。上記のコードで機能するがPythonでない場合は、間違いなくPython対処する必要があるコードの問題。
コメントできないので:
これは、Postgresのバージョンを変更した後でのみ機能したというブリドーの回答に追加します。
brew uninstall postgres
brew update
brew install postgres --with-openssl
次に、Brideauから提供されたコードを実行すると、機能するはずです。
Psycopg2のv2.6.1またはv2.6.2(私のように)を使用している場合、答えはv2.7への単純なアップグレードでした。 psycopg2の リリースノート を読むと、SSLのマイナーな修正がありましたが、特に関連性があるようには見えません。
私のセットアップは次のとおりでした:
ランニング pip uninstall psycopg2
に続く pip install psycopg2
解決された問題。