[pgpool-general-jp: 317] Re: JDBC から pgpool-II を経由してのラージオブジェクトの読み込み
スクゥ 陶山 泰
suyama @ skoo.co.jp
2007年 12月 19日 (水) 13:49:29 JST
こんにちは。陶山です。
現時点での状況を報告しておきます。
ラージオブジェクトの読み出しはうまく動作するけれども、
書き込みがうまくいかない。
陶山> Tatsuo> また,現在のPostgreSQLは(どのバージョンからか忘れましたが)この修正がコ
陶山> Tatsuo> ミットされており,pgpoolでうまくラージオブジェクトが扱えるようになって
陶山> Tatsuo> います。ただ,そのためには新しいラージオブジェクトのAPIを使う必要があ
陶山> Tatsuo> りますし,おそらくアプリケーション側でもそのAPIを使うように修正が必要
陶山> Tatsuo> になると思います。
陶山>
陶山> そうなのですか。
陶山> PostgreSQL8 あたりでラージオブジェクトの扱いが大きく変わっていました
陶山> ので、たぶんそのあたりで変わったのでしょうね。
陶山>
陶山> Tatsuo> このあたり,JDBCドライバ側での対応も必要になると思いますが,私は
陶山> Tatsuo> どうなっているのか分かりません。
陶山>
陶山> PostgreSQL8 からは、JDBC ドライバもアップデートしないと接続できません
陶山> でした。
PostgreSQL 8.1.7
JDBC 2 (jdk1.3を使っているので)
pgpool-II 2.0.1 Port 5432
データは、PostgreSQL 7.2 のDBを dump し、pgpool 経由で restore
$ pg_restore -p 5432 -d dbname /var/lib/postgresql/temp/backdata.tar
エラー(Index が作成できない)が出たものの、エラーとなったコマンドを全
てマニュアルで実行し、index を作成した
クライアントPCから java アプリケーション(jdk1.3)で、pgpool に接続し、
絵や写真などのラージオブジェクトを読み出すことに成功しました。
アプリケーションは、PostgreSQL7 対応から PostgreSQL8 対応にアップする
ために、若干の修正を施しました(ラージオブジェクト処理)。
ここで、写真データ(jpg ファイル)をラージオブジェクトとして格納しよ
うとしてエラーが発生し、格納できませんでした。
pgpool-II を経由しないで、直接一方だけの postgreSQL8.1.7 にラージオブ
ジェクトを格納することはできました。
エラーメッセージは下記の通りです。
−− ここから −−−−−−−−−−−−−−−−−−−−−−−−−−−
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
Exception: java.io.EOFException
Stack Trace:
java.io.EOFException
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:257)
at org.postgresql.core.v3.QueryExecutorImpl.receiveFastpathResult(QueryExecutorImpl.java:578)
at org.postgresql.core.v3.QueryExecutorImpl.fastpathCall(QueryExecutorImpl.java:485)
at org.postgresql.fastpath.Fastpath.fastpath(Fastpath.java:74)
at org.postgresql.fastpath.Fastpath.fastpath(Fastpath.java:114)
at org.postgresql.fastpath.Fastpath.getInteger(Fastpath.java:126)
at org.postgresql.largeobject.LargeObject.<init>(LargeObject.java:91)
at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:202)
at PImporter.run(PImporter.java:92)
End of Stack Trace
−− ここまで −−−−−−−−−−−−−−−−−−−−−−−−−−−
PImporter.java は、私の書いたプログラムです。
<< PImporter.java の一部 >>
LargeObjectManager lom = ((org.postgresql.PGConnection)db).getLargeObjectAPI();
long oid = lom.createLO( LargeObjectManager.READ | LargeObjectManager.WRITE );
LargeObject obj = lom.open( oid, LargeObjectManager.WRITE ); <<<< 92行目
pgpool-II を経由せずに直接 postgresql 8.1.7 にラージオブジェクトを格
納することは可能だけれど、pgpool-II 2.0.1 を経由すると格納できないのは
なぜでしょうか。
ラージオブジェクトの読み出しは、pgpool-II 2.0.1 経由でもうまく動作し
ています。
pgpool-general-jp メーリングリストの案内