postgresql - 如何并发创建Gin索引? POSTGRES 和 Rails 4.2

标签 postgresql ruby-on-rails-4 activerecord concurrency gwt-gin

我正在学习关于使用 postgresql 和 rails 4 进行多索引全文搜索的 thoughtbot 教程。我似乎无法让索引迁移工作。我试过了

  disable_ddl_transaction!  
  def change
    add_index(:cards, :object, using: 'gin', algorithm: :concurrently)
    add_index(:cards, :content, using: 'gin', algorithm: :concurrently)
    add_index(:tags, :name, using: 'gin', algorithm: :concurrently)     
  end

  def up
    ActiveRecord::Base.connection.execute <<-SQL
    CREATE INDEX CONCURRENTLY index_cards_on_object ON cards USING gin(to_tsvector('english', object));
    CREATE INDEX CONCURRENTLY index_cards_on_content ON cards USING gin(to_tsvector('english', content));
    CREATE INDEX CONCURRENTLY index_tags_on_name ON tags USING gin(to_tsvector('english', name));
   SQL
 end
 def down
    ActiveRecord::Base.connection.execute <<-SQL
    DROP INDEX index_cards_on_object;
    DROP INDEX index_cards_on_content;
    DROP INDEX index_tags_on_name;
  SQL
end

我收到以下错误(分别)

PG::UndefinedObject: ERROR: data type character varying has no default operator class for access method "gin"

ActiveRecord::StatementInvalid: PG::UndefinedObject: ERROR: data type character varying has no default operator class for access method "gin" PG::SyntaxError: ERROR: syntax error at or near "CREATE"

欢迎所有的帮助和见解,谢谢

最佳答案

您问这个问题已经 4 年多了,但我仍然在寻找相同问题的答案时进入了这个主题。由于我已经设法解决了这个问题,所以我将与您以及最终来到这里的其他人分享解决方案。

尝试将这些扩展添加到迁移文件中的 changeup 方法。请注意,并非每个都需要,但我发现有时一个是不够的。 btree_gin 在我的案例中有效。试试吧!

enable_extension "plpgsql"
enable_extension "btree_gin"
enable_extension "pg_trgm"
enable_extension "fuzzystrmatch"
enable_extension "btree_gist"

关于postgresql - 如何并发创建Gin索引? POSTGRES 和 Rails 4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30790949/

相关文章:

ruby-on-rails - Rails 日期晚于

ruby-on-rails - self.table_name 在具有不同 rails 模式的模型中不起作用

sql - 将 SELECT 结果与另一个表中的值相乘

ssl - 机械化获取 "Errno::ECONNRESET: Connection reset by peer - SSL_connect"

ruby-on-rails - 是否值得测试诸如范围之类的低级代码?

ruby-on-rails - Rails 中的 respond_to 和 respond_with 有什么区别?

ruby-on-rails - Rails 4 多线程和 connection_pool 问题

sql - 简单的查询确实很慢

sql - 您如何确保日志记录表中的值与其他表中的对象相匹配?

Shell 脚本和 SQL 结果