ruby-on-rails - 创建索引错误:索引表达式中的函数必须标记为 IMMUTABLE
问题描述
尝试实施对其他问题提出的建议:
我编写了此迁移以删除当前索引并创建新索引:
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
解决方案
如果将来有人发现它有用,用户@laurenz-albe 在引用的问题中提供了该问题的解决方案,只需将函数 unaccent 创建为自定义 pg 函数:
CREATE FUNCTION my_unaccent(text) RETURNS text LANGUAGE SQL IMMUTABLE AS
'SELECT unaccent($1)';
推荐阅读
- tfs - 将非英语 TFS 项目集合迁移到 DevOps
- java - 根据java中的条件动态添加执行器
- oracle - 尝试使用 LINQPad 连接到 Oracle 时出现“无法获取 Oracle 客户端信息”
- c# - C# 和 Google 表格:离线模式
- karate - 如何在空手道 API 自动化项目中集成 Allure Report
- r - 将“整体”组添加到 facet_wrap (ggplot2)
- c - 按位与的结果似乎为 0,但不是
- excel - 使用 VBA 过滤多个组合
- mysql - Aws Rds 全局事件调度程序为超级管理员引发身份验证错误
- azure - 为什么 Azure SignalR 服务不提供诊断或日志?