创建索引ERROR:索引表达式中的函数必须标记为IMMUTABLE

时间:2018-06-06 10:48:10

标签: ruby-on-rails postgresql activerecord

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

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

问题是我收到了这个错误,我认为因为我使用了较低或不相似的函数来创建索引:

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

1 个答案:

答案 0 :(得分:0)

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

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