2010-12-30 21 views
19

私はLinuxマシン上でPostgreSQLの実行中のローカルインスタンスを持っています。私がpsqlコマンドをシェルから使用すると、問題なくログインできます。私はJDBC経由でPostgreSqlに接続する必要がありますが、DriverManager.getConnection()urlというパラメータを渡す必要があるのはわかりません。JDBCを使用したPostgreSQLのローカルインスタンスへの接続

これはjdbc:postgresql:で始まりますが、次に進む予定はありますか?

システムグループによって、データベースがユーザー名のように作成されたというメッセージが表示されました。例えば私のユーザーがjutkyであればDBはjutkyが作成された名前を付けられますが、私はjdbc:postgresql:jutkyへの接続を開こうとすると、私は経由でログインすると、私はエラーに

org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky" :(

追加情報

を取得しますpsql私はパスワードを要求されないので、JDBC経由でログインしようとすると空の文字列をパスワードとして渡します - それは正しいですか、それともnullか何かを渡すべきですか?

私は残りの中で、私が見シェルでこの行psql --helpを入力すると:だから私は、私はsocket directory経由のPostgreSQLに接続されていることを理解し

Connection options: 
    -h, --host=HOSTNAME  database server host or socket directory (default: "/var/run/postgresql") 

を、それがJDBCでのURL文字列に何かを重要でしょうか?答えを


EDIT

まず感謝。

第2回:私はJDBCを使用しています。特に、初めてJDBCからPostgreSQLに接続していないので、一般的なルールを知っていて、私はそのドキュメントを読んでいます。しかし、説明されたケースでは、インスタンスがsocket directory経由で実行されていて、どのパスワードを提供する必要がある場合、接続文字列をどのように構築すればよいかわかりません。 psqlでログインすると、パスワードの入力をまったく求められないためです。

ありがとうございます。

答えて

23

psqlが正常に動作します理由です、デフォルトではPostgresは、オペレーティング・システム・アカウントに基づいて認証とUnixソケットを介した接続を受け入れるように構成されていることに注意してパスワードは必要ありません。

JDBC接続はパスワード認証を使用してTCP/IP上で行われるため、それに応じてpg_hba.confを変更する必要があります。たとえば、この行は、パスワード認証を持つすべてのユーザーのすべてのデータベースに同じマシンからのTCP/IP接続を可能にする:

host all   all   127.0.0.1/32   md5 

このラインjdbc:postgresql:databasenameが動作するはずです追加した後。

EDIT: PostgreSQL JDBCドライバはTCP/IPでしか動作しないため、Unixソケット経由でJDBC接続を作成することはできません。 JDBC接続を作成するときに使用するパスワードは、ユーザーに割り当てられたパスワードです。持っていない場合は、たとえばALTER USERコマンドを使用して割り当てることができます。 19.3. Authentication methodsを参照してください。

も参照してください:

+0

システムグループにその問題を確認するよう頼んだ。アドバイスをいただきありがとうございます。 – jutky

+1

また、listen_address = '*'がpostgresql.confで有効になっていることを確認してください。さもなければ、TCP/IP接続はまったく不可能です(ローカル接続であってもJDBCが使用しているものです) –

+0

@jutky:更新されました。 – axtavt

8

これはすべてofficial documentationで説明されています。

これは、関連する部分である:他の回答に加えて

String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true"; 
Connection conn = DriverManager.getConnection(url); 
+0

質問の編集を参照してください。 – jutky

関連する問題