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
経由でログインすると、パスワードの入力を求められることはまったくありません。
前もって感謝します。
他の回答に加えて、デフォルトでは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。認証方法 を参照してください。
以下も参照してください:
それはすべて 公式ドキュメント で説明されています。
これは関連する部分です:
String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);