web-dev-qa-db-ja.com

Postgresql URL接続文字列のパスワードの特殊文字を処理するにはどうすればよいですか?

次の形式のPostgresqlURL接続文字列を使用します。

postgresql://user:secret@localhost

その文字列の特殊文字(例:$)を処理して、postgresデータベースに接続したときに実際に機能するようにするにはどうすればよいですか?

単純にURLエンコードしてみたので、たとえば「test $」は「test%24」になりますが、使おうとすると「致命的:パスワード認証に失敗しました」というエラーが出るので問題ないようです。 。

17
wgpubs

ドキュメントの 接続URI を参照してください。

あなたの質問では正しくないと思われることがいくつかあります。

  • URIはバージョン9.2以降のみpostgresでサポートされているため、9.1クライアントではまったく機能しないはずです。または、接続URI自体を実装するクライアントを使用しています。

  • パーセント記号エンコーディングがサポートされています。ドキュメントごと:

    パーセントエンコードは、URI部分のいずれかに特別な意味を持つ記号を含めるために使用できます。

  • パーセントエンコードは、ドル文字には必要ありません。

9.3で試してみました:

sql> alter user daniel password 'p$ass';

$ psql 'postgresql://daniel:p$ass@localhost/test'

動作します

$ psql 'postgresql://daniel:p%24ass@localhost'

動作します

psql 'postgresql://daniel:pass@localhost/test'

期待どおりに失敗します:パスワードが間違っています。

17
Daniel Vérité