我创建了一个表格答案,并为其添加了以下索引:
add_index :answers, [:output, :question_id], unique: true
索引允许通过它的输出和question_id快速查找答案。创建许多答案时,我收到以下错误:
PG :: ProgramLimitExceeded:错误:索引行大小3088超过索引
的最大值2712 “index_answers_on_output_and_question_id”
提示:大于缓冲页面1/3的值无法编入索引 考虑值的MD5哈希的函数索引,或使用全文索引。
如何解决此问题?我可以将唯一性方面移动到模型,但索引很重要。 Rails是否支持创建MD5哈希值?
答案 0 :(得分:1)
这是Postgres提出的一个错误。它抱怨你应该索引md5(giant_string)或沿着这些行的某些东西(在你的情况下我想象一个answer_position字段),而不是直接的Giant_string,因为索引大的字符串并不是那么有用。
答案 1 :(得分:0)
使用以下代码创建迁移,只需替换表和字段名称:
def up
execute <<~SQL
CREATE INDEX CONCURRENTLY "index_table_on_field" ON table(MD5(field));
SQL
end