2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PostgreSQL インデックス(btree)の謎の制限

Posted at

久しぶりの投稿。最後は解決出来ていないのでモヤモヤした記事です。

PostgreSQL(8.4) で遭遇したエラーについて。

ERROR: index row size 3376 exceeds maximum 2712 for index "xxx"

というエラーが発生しました。

どうやらPostgreSQLではデフォルトのB-treeインデックスでは項目の長さに制限があるようです。
バージョンによってその数値は違うようですが、ソースにハードコードされているらしく、制限を回避する方法は無さそうです。
(そもそもそんな長い文字列にインデックス貼るなよ!っていうのは別のお話として・・・・)

で、このエラー、テストした当初は発覚しませんでした。
テストでは「12345678901234567890・・・・・」というような繰り返しパターンで1万文字の文字列を生成し挿入していましたが、このパターンだとエラーにはなりません。ところが、通常の自由文だと2712バイトを超えるとエラーになります。B-treeだと並べ替えされ、範囲検索にも使えるくらいなので、文字列を加工せずに比較して並べ替えたインデックスを貼るものと思っていましたが、文字列のパターンによって、エラーになったりならなかったりする原因が全く分かりません。

そもそもインデックスを貼るカラムの長さに制限があることすら、マニュアルに記述されておらず(少なくとも見つけられず)、さらに文字列のパターンによって、違いがあるなんて予想もしませんでした。
(そもそもそんな長い文字列に、、、以下略)

だれかエライ人、教えてください。。。。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?