使用Rails 4并尝试在我的hstore列上执行索引。
我的迁移文件:
class AddIndexToProfiles < ActiveRecord::Migration
def up
execute "CREATE INDEX profiles_metadata_gin_data ON profiles USING GIN(meta_data)"
end
def down
execute "DROP INDEX profiles_metadata_gin_data"
end
end
我收到的错误:
StandardError: An error has occurred, this and all later migrations canceled:
PG::ProgramLimitExceeded: ERROR: index row size 7936 exceeds maximum 2712 for index "profiles_metadata_gin_data"
知道该怎么做吗?
答案 0 :(得分:1)
不同的索引类型对可以编入索引的项目的大小有各种限制;对于您的GIN索引,看起来您已经超过了“GinMaxItemSize”限制,其定义如下:
#define GinMaxItemSize \
MAXALIGN_DOWN(((BLCKSZ - SizeOfPageHeaderData - \
MAXALIGN(sizeof(GinPageOpaqueData))) / 3 - sizeof(ItemIdData)))
我认为您的解决方法选项是:
CREATE INDEX profiles_metadata_gin_data ON profiles USING GIN(meta_data) WHERE length(meta_data::text) < 2000
。您必须在查询中包含相同的WHERE子句才能使用索引,这可能比它的价值更麻烦。