久しぶりの投稿。最後は解決出来ていないのでモヤモヤした記事です。
PostgreSQL(8.4) で遭遇したエラーについて。
ERROR: index row size 3376 exceeds maximum 2712 for index "xxx"
というエラーが発生しました。
どうやらPostgreSQLではデフォルトのB-treeインデックスでは項目の長さに制限があるようです。
バージョンによってその数値は違うようですが、ソースにハードコードされているらしく、制限を回避する方法は無さそうです。
(そもそもそんな長い文字列にインデックス貼るなよ!っていうのは別のお話として・・・・)
で、このエラー、テストした当初は発覚しませんでした。
テストでは「12345678901234567890・・・・・」というような繰り返しパターンで1万文字の文字列を生成し挿入していましたが、このパターンだとエラーにはなりません。ところが、通常の自由文だと2712バイトを超えるとエラーになります。B-treeだと並べ替えされ、範囲検索にも使えるくらいなので、文字列を加工せずに比較して並べ替えたインデックスを貼るものと思っていましたが、文字列のパターンによって、エラーになったりならなかったりする原因が全く分かりません。
そもそもインデックスを貼るカラムの長さに制限があることすら、マニュアルに記述されておらず(少なくとも見つけられず)、さらに文字列のパターンによって、違いがあるなんて予想もしませんでした。
(そもそもそんな長い文字列に、、、以下略)
だれかエライ人、教えてください。。。。。