- PR -

jdbc+postgresql 「コネクションが取得できない」

投稿者投稿内容
ogeretyou
会議室デビュー日: 2004/06/14
投稿数: 18
投稿日時: 2004-06-14 01:29
自宅サーバ内にて、javaでpostgresqlへの接続を試してみたのですが、
connectionが取得できず困っています。

Redhat9
java 1.4.2_03
postgresql 7.3

classpathに
JAVA_HOMEと、
pg73b1jdbc1.jar
pg73b1jdbc2.jar
pg73b1jdbc3.jar
が追加されている

jdbcでPostgreSQLにアクセスするjavaサンプルプログラムを、
サーバ内に配置して実行すると、
下記のエラーが発生します。

Connection refused. Check that the hostname and port are correct and that the
postmaster is accepting TCP/IP connections.
at
org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:161)
at org.postgresql.Driver.connect(Driver.java:120)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at HelloWorldJDBCPostgreSQL.main(HelloWorldJDBCPostgreSQL.java:24)


javaのソースコード内でconnectionの取得は、下記のように行っています。

Connection con = DriverManager.getConnection("jdbc:postgresql:DB_NAME", "postgres", "");

上記のように行うと、
URL:localhost
Port:5432
とデフォルトの設定が適用されると思いました。

エラーの内容からして、URLとPortの指定方法が問題かと思うのですが、
原因がわかりません。

プログラムはPostgreSQLがインストールされているのと同じサーバ内に設置しているので、
localhost、5432で問題ないかと思いました。
一応、URLの指定をIPアドレス、ポートを5432で明示的に指定し、ルータの設定で[IPアドレス][Port:5432]を
サーバのアドレスにフォワードするように設定したり、といろいろ試してみたのですが、
全て同じエラーが出力されました。

参考にしたサイトが、PostgreSQL 7.1 を対象にしており、
/usr/share/pgsql/jdbc7.1-1.2.jar
をClasspathに追加するように書いてあったのですが、7.3に上記のjarがなかったため、
pg73b1jdbc1.jar
pg73b1jdbc2.jar
pg73b1jdbc3.jar
の3つ全てをClasspathに追加する、という対応をとりました。
あまぴょん
会議室デビュー日: 2002/01/28
投稿数: 12
投稿日時: 2004-06-14 02:42
サーバのファイアウォール設定とかは問題ないですか。
以前、こんな感じのことで引っ掛かった気がしたのですが。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-14 15:24
という事は、postmaster が 5432 番ポートを listen している筈ですよね。
してますか ?
syousuke
会議室デビュー日: 2002/09/27
投稿数: 19
投稿日時: 2004-06-14 21:29
JDBCドライバは、
JDBCはpostgresqlのソースからコンパイルできます。
src/interfaces/jdbcディレクトリ以下に入っています。
postgresql.jarが作成されます。

また、TCP/IPにて通信する場合、pg_hba.confに
クライアントを設定する必要がありますが、行っていますか?


fofofo
会議室デビュー日: 2003/01/06
投稿数: 8
お住まい・勤務地: 大阪
投稿日時: 2004-06-14 22:23
どーも。
私も以前に同じ例外でつまづいた事があったので、参考までに。

postgresql.confでTCP/IP経由でのアクセスが禁止されていませんか?
同ファイルのtcpip_socketの値を確認してみてください。
ogeretyou
会議室デビュー日: 2004/06/14
投稿数: 18
投稿日時: 2004-06-15 00:41
返信どうもありがとうございますっ!

とりあえず今、telnetで5432にアクセスしてみたところ、

# telnet localhost 5432
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

とエラーになりました。

PostgreSQLの起動方法は Webmin により行っており、
とくにオプションをしていするような欄はみあたりませんでした。

この起動方法では外部からのアクセスを許可しないような起動方法に
なっているかもしれません。

とりあえずこれからまたアドバイスをもとにいろいろ試してみます。
経過を報告します。

とりいそぎ失礼します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-16 12:06
エラーの内容とかバージョンは違うのですが。。。
サーバ:
・RedHat9
・PostgreSQL 7.4.2
クライアント:
・WindowsXP
・J2SE 1.4.2_04
で接続して、接続できない状態でした。

 fofofoさんのご回答を参考にpostgresql.confを見たとこと、"tcpip_socket"の近くにある"port=5432"というエントリがコメントアウトされていた為、これをアンコメントすると、つながるようになりました。

ご参考まで。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-06-16 12:37
接続できない原因はいくつかあるでしょうけど、
PostgreSQL側の設定については、次のページが参考になるでしょう。

PostgreSQL日本語ドキュメント
http://www.postgresql.jp/document/

16.4. 実行時の設定
http://www.postgresql.jp/document/pg742doc/html/runtime-config.html

postmaster
http://www.postgresql.jp/document/pg742doc/html/app-postmaster.html

PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)
3.5) 他のホストからの接続はどのように制御しますか?
http://www.postgresql.org/docs/faqs/FAQ_japanese.html#3.5

あと、この@ITの記事や会議室で「PostgreSQL」を検索みてもよいでしょう。
PostgreSQLに関する記事や投稿はたくさんあります。

[ メッセージ編集済み 編集者: ちいにぃ 編集日時 2004-06-16 12:47 ]

スキルアップ/キャリアアップ(JOB@IT)