【问题标题】:How to Create Gin Indices Concurrently? POSTGRES & Rails 4.2如何同时创建 Gin 指数? POSTGRES & Rails 4.2
【发布时间】:2015-06-11 20:36:10
【问题描述】:

我正在关注关于使用 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: 错误:数据类型字符变化没有访问方法“gin”的默认运算符类

ActiveRecord::StatementInvalid: PG::UndefinedObject: 错误: 数据类型字符变化没有访问方法“gin”的默认操作符类 PG::SyntaxError: ERROR: "CREATE" 处或附近的语法错误

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

【问题讨论】:

  • 我会查看postgresql 服务器日志文件以了解将什么命令传输到数据库。

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


【解决方案1】:

您问这个问题已经 4 年多了,但仍然 - 在寻找相同问题的答案时,我最终进入了这个线程。由于我已经设法应对它,我正在与您以及最终在这里的其他人分享解决方案。

尝试在迁移文件中为您添加这些扩展 changeup 方法。请注意,不是每个人都需要,但我看到有时一个人是不够的。 btree_gin 在我的情况下工作。试试看吧!

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

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 2017-07-07
    • 2019-11-11
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多