web-dev-qa-db-ja.com

JDBCを使用したPostgreSqlのローカルインスタンスへの接続

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

jdbc:postgresql:で始まる必要がありますが、次に何をしますか?

システムグループから、ユーザー名のようなデータベースが作成されたと言われました。例えばユーザーがjutkyの場合、jutkyという名前のデータベースが作成されましたが、jdbc:postgresql:jutkyへの接続を開こうとすると、エラーが発生します

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

追加情報

psqlを介してログインすると、パスワードの入力を求められません。そのため、JDBCを介してログインしようとすると、空の文字列をパスワードとして渡します。それは正しいですか、またはnull か何か?

シェルでpsql --helpと入力すると、残りの行に次の行が表示されます。

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

だから私はsocket directoryを介してPostgreSqlに接続することを理解していますが、それはJDBCのURL文字列に何か関係があるのですか?


[〜#〜]編集[〜#〜]

最初に答えてくれてありがとう。

第二に、JDBCを使用するのは初めてではなく、特にJDBCからPostgreSqlに接続するのは初めてではないため、一般的なルールを理解し、ドキュメントを読みました。ただし、記載されているケースでは、インスタンスがsocket directoryを介して実行されている場合に接続文字列をどのように正確に構築する必要があるか、またどのようなパスワードを提供する必要があるかわかりません。 psql経由でログインすると、パスワードの入力を求められることはまったくありません。

前もって感謝します。

21
jutky

他の回答に加えて、デフォルトではPostgresはオペレーティングシステムアカウントに基づく認証を使用してUnixソケット経由の接続を受け入れるように構成されているため、psqlは正常に機能し、パスワードを必要としません。

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。認証方法 を参照してください。

以下も参照してください:

28
axtavt

それはすべて 公式ドキュメント で説明されています。

これは関連する部分です:

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