【问题标题】:Creating index ERROR: functions in index expression must be marked IMMUTABLE创建索引错误:索引表达式中的函数必须标记为 IMMUTABLE
【发布时间】:2018-06-06 20:12:18
【问题描述】:

尝试实施对其他问题提出的建议:

question related

我已经编写了这个迁移来删除当前索引并创建新索引:

class ChangeIndexes < ActiveRecord::Migration[5.1]
  def change
    remove_index :part_masters, name: "part_masters_on_combo_idx" 

    execute <<-SQL
      CREATE INDEX ON part_masters (lower(unaccent(combo)) text_pattern_ops);
      CREATE INDEX ON locations (lower(unaccent(ubicacion)) text_pattern_ops);     
    SQL
   end
end

问题是我收到了这个错误,我想是因为我使用了 lower 或 unaccent 之类的函数来创建索引:

PG::InvalidObjectDefinition: ERROR: functions in index expression must be marked IMMUTABLE

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    如果将来有人发现它有用,用户 @laurenz-albe 在引用的问题中提供了此问题的解决方案,只需将函数 unaccent 创建为自定义 pg 函数:

    CREATE FUNCTION my_unaccent(text) RETURNS text LANGUAGE SQL IMMUTABLE AS 
    'SELECT unaccent($1)';
    

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 2023-03-29
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多