[pgsql-jp: 41156] Re: 【ご質問】バイナリデータの扱いについて

Nakamoto, Hiroki nakamoto.hiroki @ jp.fujitsu.com
2012年 7月 26日 (木) 09:32:20 JST


MauMauさん

中本です。

ご回答いただきありがとうございます。

やはりBytea型の場合はgetBlobメソッドは使用できないんですね。
Javaアプリケーションに手を入れないで移行できれば良かったんですが
残念です。

自動コミットの件につきましては、皆様からアドバイスをいただき、
対応方針が決まりました。

修正方式は、アプリケーション(Java)側にて、コード中にコネクション
オブジェクトでConnection.setAutoCommit(false)を指定するです。
コネクション周りで注意しなければならない点があるとのことですので、
デフォルトで自動コミットをfalseにする対応は取らないことにしました。

<注意点>
 全トランザクションで、一律autoCommit(false)とするには注意が必要!
 Postgresの場合、autoCommit(false)とした場合、仮にSELECTだけのトランザクションであって
 も、commit or rollbackすることが必須になる。
 これが発行されないと、トランザクションが終了せず、特にコネクションプールを使用している場合、
 トランザクションが終了しないで開放されたコネクションを後続がつかみ、意図しないトランザクション
 スコープで、トランザクションが実行される。
 (前のトランザクションスコープが引き継がれる)


以上 よろしくお願い致します

-----Original Message-----
From: pgsql-jp-bounces @ ml.postgresql.jp [mailto:pgsql-jp-bounces @ ml.postgresql.jp] On Behalf Of MauMau
Sent: Wednesday, July 25, 2012 8:23 PM
To: PostgreSQL Japanese Mailing List
Subject: [pgsql-jp: 41155] Re: 【ご質問】バイナリデータの扱いについて

中本さん


MauMauといいます。

ご認識は正しいです。
bytea型の列を取り出すにはgetBytes()またはgetBinaryStream()をつかいます。
一方、ラージオブジェクトを取り出すにはgetBlob()、またはLargeObjectクラスのread()を使います。
このことはマニュアルの次のページに書かれています。

http://jdbc.postgresql.org/documentation/91/binary-data.html

ところで、自動コミットの件は解決されたでしょうか?


以上です。

----- Original Message ----- 
From: "Nakamoto, Hiroki" <nakamoto.hiroki @ jp.fujitsu.com>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Wednesday, July 25, 2012 5:36 PM
Subject: [pgsql-jp: 41154] 【ご質問】バイナリデータの扱いについて


中本と申します。

バイナリデータの扱いについて質問がございます。
昨日から立て続けで大変恐縮ですがよろしくお願い致します。

<質問内容>
・Oracle→Postgresへの移行に伴いバイナリデータ型がBlob→Byteaに変更。
 上記に伴い、JavaアプリのResultSetオブジェクトのgetterメソッドの修正
 は必要でしょうか?現行はgetBlobメソッドを使用。

 修正を行わない場合、以下のPSQLEXceptionエラーとなる。
 『PSQLException : 型 long :\xで不正な値』
 Bytea型の場合、16進数の先頭に\xが付くため、型変換の際に失敗している。

<調査実績>
・ネット情報では、Bytea型を使用する場合は、getBytes()またはgetBinaryStream()
 のみ使用可能。ラージオブジェクト機能を使用する場合は、Postgres SQL JDBCドライバ
 で提供されるLarge Objectクラスの使用またはgetBLOB()が使用可能と記載がありました。
・実際にgetBinaryStream()に変更するとエラーになりませんでした。

<その他>
 ・Postgres Ver:PPAS9.1
 ・開発意言語:Java

調査実績をみると、Javaアプリの修正が必要と判断しましたが、認識は誤ってないでしょうか?


以上 よろしくお願い致します



pgsql-jp メーリングリストの案内