Ruby on rails hs存储索引行大小最大错误

Ruby on rails hs存储索引行大小最大错误,ruby-on-rails,postgresql,ruby-on-rails-4,hstore,postgresql-9.3,Ruby On Rails,Postgresql,Ruby On Rails 4,Hstore,Postgresql 9.3,使用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_d

使用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

你知道该怎么做吗?

不同的索引类型对可能被索引的项目的大小有不同的限制;就您的GIN索引而言,看起来您已经远远超过了“GinMaxItemSize”限制,定义如下:

#define GinMaxItemSize \
    MAXALIGN_DOWN(((BLCKSZ - SizeOfPageHeaderData - \
            MAXALIGN(sizeof(GinPageOpaqueData))) / 3 - sizeof(ItemIdData)))
我认为您的解决方案包括:

  • 尝试一个要点索引,我认为应该有更高的限制
  • 用更大的块大小重新编译Postgre,也许BLCKSZ=16384可以工作
  • 使用部分GIN索引跳过那些麻烦的大型“元数据”列,例如
    在使用GIN(元数据)的配置文件上创建索引配置文件\u元数据\u GIN\u数据,其中长度(元数据::文本)<2000
    。但是,为了使用索引,您必须在查询中包含相同的WHERE子句,这可能会带来更多麻烦
  • 找到一种方法来修剪那些麻烦行的元数据列,这样就可以在GIN的2712字节限制下发出吱吱声
#define GinMaxItemSize \
    MAXALIGN_DOWN(((BLCKSZ - SizeOfPageHeaderData - \
            MAXALIGN(sizeof(GinPageOpaqueData))) / 3 - sizeof(ItemIdData)))