PostgreSQLの運用に際してのトラブルについて。
単純ミス?
PostgreSQLに限らないのですが、データベースを使用する場合、単純なミスで
テーブルにアクセスできなくなるなどのトラブルに見舞われることがあります。
経験が浅いときは何が原因かわからずハードを疑ったりソフトを疑ったりと無駄な
時間を浪費してしまうことにもなります。
そんな経験からこのメモを残しています。
ODBC経由でACCESSからPostgreSQLサーバにアクセスすると特定のテーブルに
対してデータシートビューをしようとすると、表示が固まり、ACCESSがハングアップ
する。
テーブル名に日本語、データ中には機種依存文字(I、IIなど)を使用していたため、
サーバプログラムの日本語対応を疑った。
当初WindowsMeでACCESS97を使用していたため、
ACCESSの問題を疑い、ACCESS2002を試用したり、MeのODBCの問題を
疑い、WindowsXP機にACCESS2002をインストールしてXPでの動作確認を
したりしたが、現象に変化なし。
ハングアップするテーブルでは5つあるうちの、2つのフィールドでテーブル作成時より
長い文字列を登録していたためではないかと疑い、テーブルを修正したが、現象に
変化なし。
また機種依存文字についてもそうでないものに変更してみたが現象に変化は
なく、殆ど手詰まりとなりました。
疑問なのは、データに問題がありそうでありながらも、別のPostgreSQLサーバとの
組み合わせを2機種ほど試してみましたが、それぞれの機種でOSやPostgreSQL
のバージョンが微妙に異なるものの、まったく問題が生じていないことで、一応動作
しているように見えながらも、ハード側に微妙に問題があるのではないかという懸念
はありました。
最後の手段としてネットに関するトラブルはネットワークカード(NIC)を疑えという
基本に立ち返って、NICをRTL8139ベースのものからVIA-Rhiineベースのものに
変更してみたところ、これが的中。 今までのトラブルが嘘のように解消。
データについても問題を感じたものにもどしたが、まったく問題なし。
結局、原因は使用したネットワークカード(NIC)とPCの相性問題でした。
起動時のNICならびにネットワークの認識や、他のアプリケーションの利用に関して
特に問題がみられなかったので、盲点となりました。
EPSONのPanelTopとELECOMのRTL8139ベースのカードの組み合わせは性質
の悪いトラブルの温床になるようです。(たたし本件は他の組み合わせでも問題が
起こることを示唆するものではありませんので誤解なきよう)
ローマ数字が比較できない?
ACCESSで作業しているときのことですが、データの文字列に?とか?を多用して
いたシステムで、SQLクエリにGROUP BYを使用したときに、本来、?と?でレコード
が別に表示されるべきものが、?だけ、あるいは?のレコードだけが表示される現象
が発生しました。
現象がおきたのは、Linux系のOSで、Windowsでは起きていませんでした。
開発環境がWindowsだったため、発見はテストの中盤になるまで分かりませんでした。
最初、PostgreSQLのバージョン問題かと思い、最新版にプログラムをアップグレード
しましたが、症状に変化はなく、OSの違いも考えて、コード体系の問題
原因は、PostgreSQLは7.xからNLSがサポートされていますが、initdbを実行する
ときにロケールが設定されていると、内部処理の文字コードが特殊な「C」とならない
ため、
に 、
で、WindowsではSHIFT_JISが初期値
になるため、PostgreSQL内部的には、LC_ALL=Cとして扱われ、結果的にロケール
が効かない状態だったため、比較処理がロケールによっておかしくならなかった