如何在Rails中索引hstore字段? (PG :: ProgramLimitExceeded:错误:索引行大小3112超过最大值2712)

时间:2015-04-07 18:43:57

标签: ruby-on-rails postgresql activerecord

我正在使用Rails 4.0和Postgres,我有 my_records 表,如:

id   -> Integer 
data -> hstore

请注意,数据字段包含长哈希,如:

{ "key1" => "val1", "key2" => "val2", .....etc }

现在,当我尝试查询表格时(我在数据字段中有大约500,000条记录和大哈希),这需要很长时间:

MyRecord.where("data -> 'key1' = 'val1'")

现在我正在尝试使用以下方式索引数据字段:

add_index :my_records, :data, using: :gin

但是当我尝试运行迁移时,我收到此错误:

PG::ProgramLimitExceeded: ERROR:  index row size 3112 exceeds maximum 2712 for index "index_my_records_on_data"
: CREATE  INDEX  "index_my_records_on_data" ON "my_records" USING gin ("data")

有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

看起来您的语法是正确的 - 您只是超出了GIN索引大小限制。该网站详细描述了该问题,并提供了一些替代方案:

http://sohu.io/questions/4826682/hstore-index-row-size-maximum-error

您可能还想退后一步,重新考虑您的设计。使用传统的NoSQL数据库可能会更好,特别是如果您的数据相对动态。

希望这有帮助。