[pgcluster: 915] JDBC ドライバ経由での2バイト文字の更新

Takeo Sakurai saku @ msr.co.jp
2006年 7月 28日 (金) 17:10:06 JST


はじめまして。
櫻井@MSRと申します。

#先程入会前に空のメールを送ってしましました。
#申し訳ありませんでした。

現在PGCluster(1.5.0rc7)の評価、検証を行っております。
そこでJDBCドライバ経由での2バイト文字の更新時にレプリケーションが上手
く行われないという現象が発生しており、その解決策についてご教示頂ければ
と思います。


■現象
具体的には、JavaプログラムからJDBCドライバ経由でDBアクセスし、更新処理
を行った場合に、一方のクラスタDBは正常に更新され、もう一方のクラスタDB
はエラーにより更新されないor文字化けして更新されるという現象です。
この問題は、2バイト文字を含む文字列を更新しようとした場合に発生します。
発生しているエラーは下記のようなエラーです。
ERROR:  invalid byte sequence for encoding "EUC_JP": 0x8fb2

また、同じDBをPHPからアクセスすることも並行して検証中で、PHPからのDBア
クセスでは正常に2バイト文字を含む文字列を更新することができます。
PHPはEUP_JPで、JDBCドライバはUnicodeであることから、JDBCドライバ周りで
の文字コードの問題と考えています。


■JDBCドライバによる動作の違い
JDBCドライバは
http://jdbc.postgresql.org/
から
postgresql-8.1-407.jdbc3.jar
を取得しております。

現象を確認してから、JDBCドライバとPGCluster[Postgres]での文字コードに
関する情報を参考に確認を行っておりますが、上記現象の原因となるような箇
所を特定することができませんでした。
そこで、もともと検証のためのJavaプログラムはPostgresSQL(7.4.3)で稼動中
のプロダクトであるため、そのプロダクトで使用しているJDBCドライバを使用
してみました。
それは同じく上記のサイトから取得した
pg74.216.jdbc3.jar
です。
そうすると、正常にレプリケーションが行われました。


PGCluster-1.5.0rc7がPostgreSQL-8.1.2をベースにしているとのことなので、
JDBCドライバもそのバージョンに合わせた方がよいと判断しております。
postgresql-8.1-407.jdbc3.jar
を使用するためには、何か設定等が必要なのでしょうか?
また現時点で対応していな場合、検証ということで動作確認を行いますが、
pg74.216.jdbc3.jar
を使用するという選択について既知の問題など、ご意見を聞かせて頂ければと
思います。


以上、宜しくお願い致します。



pgcluster メーリングリストの案内