質問: 現在、RailsアプリのDB内のかなり長いtextカラムに対してunique indexを貼りたいと思いますが、 ``` PG::ProgramLimitExceeded: ERROR: index row size ~~~ exceeds maximum 2712 for index "index_~~~" HINT: Values larger than 1/3 of a buffer page cannot be indexed. Consider a function index of an MD5 hash of the value, or use full text indexing. ``` のエラーに遭遇しています。 uniqueにしたいので解決方法をググっているとある程度情報が見つかり、以下の記事は参考になりました。 【Rails】URLをインデックス可能な形でデータベースに保存する方法 - Qiita こちらでいう「開番地法」のような実装を、ActiveRecordまたはPostgresを用いて簡単に実装する方法は用意されていないのでしょうか?もしくは、エラーメッセージに書いてあるfull text indexingでも良いのですが、、 実装が比較的難しそうならもう一度検討します。
回答: エラーメッセージに書いてあるMD5を使った関数インデックスで十分です。セキュリティ用途にはもはやMD5は使うべきではないですが、このような用途に使うにはさほど気にする必要はありません。 MD5の偶然による衝突は無視してかまいません。衝突が起きる前にディスクがあふれます。